joergsworld
Goto Top

XML-Datei, Knoten an einer bestimmten Stelle automatisch hinfügen

Hallo zusammen,

ich stehe vor dem Problem einen Konten automatisch in einer XML-Datei hizuzufügen. Dafür müsste sicher ein Script geschrieben werden. Nun weiß ich nicht wie das am besten realisiert werden kann. Hat vielleicht jemand eine Idee oder eine Script-Vorlage?

In die Datei müsste dieser Knoten <InstrForDbtrAgt>/CONFIDENTIAL/Y</InstrForDbtrAgt> , an dieser Stelle eingefügt werden:

<CdtrAcct>
<Id>
<IBAN>DE99999999999999999999</IBAN>
</Id>
</CdtrAcct>
<InstrForDbtrAgt>/CONFIDENTIAL/Y</InstrForDbtrAgt>
<Purp>
<cd>SALA</cd>

Dei Datei kann aus der Hauptanwendung nicht anders ausgegebene werden.

Gesamte Datei:

<?xml version="1.0" encoding="UTF-8"?>  
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03 pain.001.001.03.xsd">  
 <CstmrCdtTrfInitn>
    <GrpHdr>
      <MsgId>1111111333</MsgId>
      <CreDtTm>2017-09-11T13:15:24.000+02:00</CreDtTm>
      <NbOfTxs>2</NbOfTxs>
      <CtrlSum>198.00</CtrlSum>
      <InitgPty>
        <Nm>TEST GMBH</Nm>
      </InitgPty>
    </GrpHdr>
    <PmtInf>
      <PmtInfId>1111111333</PmtInfId>
      <PmtMtd>TRF</PmtMtd>
      <BtchBookg>true</BtchBookg>
      <NbOfTxs>2</NbOfTxs>
      <CtrlSum>198.00</CtrlSum>
      <PmtTpInf>
        <SvcLvl>
          <cd>SEPA</cd>
        </SvcLvl>
      </PmtTpInf>
      <ReqdExctnDt>2017-09-12</ReqdExctnDt>
      <Dbtr>
        <Nm>TEST GMBH</Nm>
        <PstlAdr>
          <Ctry>DE</Ctry>
          <AdrLine>Musterstrasse</AdrLine>
          <AdrLine>99999 Stadt</AdrLine>
        </PstlAdr>
      </Dbtr>
      <DbtrAcct>
        <Id>
          <IBAN>DE99999999999999999999</IBAN>
        </Id>
      </DbtrAcct>
      <DbtrAgt>
        <FinInstnId>
          <BIC>BANK000000</BIC>
        </FinInstnId>
      </DbtrAgt>
      <ChrgBr>SLEV</ChrgBr>
      <CdtTrfTxInf>
        <PmtId>
          <EndToEndId>1111111333-0000001</EndToEndId>
        </PmtId>
        <Amt>
          <InstdAmt Ccy="EUR">99.00</InstdAmt>  
        </Amt>
        <Cdtr>
          <Nm>Mustermann</Nm>
        </Cdtr>
        <CdtrAcct>
          <Id>
            <IBAN>DE99999999999999999999</IBAN>
          </Id>
        </CdtrAcct>
        <Purp>
          <cd>SALA</cd>
        </Purp>
        <RmtInf>
          <Ustrd>Testzahlung 09/2017</Ustrd>
        </RmtInf>
      </CdtTrfTxInf>
      <CdtTrfTxInf>
        <PmtId>
          <EndToEndId>1111111333-0000002</EndToEndId>
        </PmtId>
        <Amt>
          <InstdAmt Ccy="EUR">99.00</InstdAmt>  
        </Amt>
        <Cdtr>
          <Nm>Musterfrau</Nm>
        </Cdtr>
        <CdtrAcct>
          <Id>
            <IBAN>DE00000000000000000000</IBAN>
          </Id>
        </CdtrAcct>
         <Purp>
          <cd>SALA</cd>
        </Purp>
        <RmtInf>
          <Ustrd>Testzahlung 09/2017</Ustrd>
        </RmtInf>
      </CdtTrfTxInf>
    </PmtInf>
  </CstmrCdtTrfInitn>
</Document>

Content-Key: 351418

Url: https://administrator.de/contentid/351418

Printed on: April 17, 2024 at 00:04 o'clock

Member: colinardo
colinardo Oct 11, 2017 updated at 15:07:29 (UTC)
Goto Top
Servus Joerg,
wenn's Powershell sein darf:
$xmlpath = 'C:\datei.xml'  
$xml = [xml](gc $xmlpath)

[System.Xml.XmlNamespaceManager]$ns = new-Object System.Xml.XmlNamespaceManager $xml.NameTable
$ns.AddNamespace("ns",$xml.DocumentElement.NamespaceURI)  

$node = $xml.CreateElement("InstrForDbtrAgt",$xml.DocumentElement.NamespaceURI)  
$node.InnerText = "/CONFIDENTIAL/Y"  
#$new = $xml.Document.CstmrCdtTrfInitn.PmtInf.CdtTrfTxInf.appendChild($node)
$xml.SelectNodes('/ns:Document/ns:CstmrCdtTrfInitn/ns:PmtInf/ns:CdtTrfTxInf/ns:CdtrAcct',$ns) | %{  
    $_.parentNode.InsertAfter($node.Clone(),$_)
}
$xml.Save($xmlpath)

Grüße Uwe

p.s. Bitte in Zukunft nutze Code-Tags für deinen Quellcode: <code> Quellcode </code>. Merci.
Member: joergsworld
joergsworld Oct 11, 2017 at 14:45:23 (UTC)
Goto Top
Hallo Uwe,

vielen Dank für den Hinweis Code-Tags und auch für die Lösungsmöglichgkeit. Ja, VBS wäre in er Tat schön.

VG Joerg
Member: colinardo
colinardo Oct 11, 2017 at 15:06:49 (UTC)
Goto Top
Ausnahmsweise face-wink
strPath = "C:\datei.xml"  
Set xmldoc = CreateObject("msxml2.domdocument")  
xmldoc.Async = False
xmldoc.load(strPath)
xmldoc.setProperty "SelectionLanguage", "XPath"  
xmldoc.setProperty "SelectionNamespaces","xmlns:ns='urn:iso:std:iso:20022:tech:xsd:pain.001.001.03'"  

Set node = xmldoc.createNode (1,"InstrForDbtrAgt","urn:iso:std:iso:20022:tech:xsd:pain.001.001.03")  
node.text = "/CONFIDENTIAL/Y"  
Set nodes = xmldoc.selectNodes("/ns:Document/ns:CstmrCdtTrfInitn/ns:PmtInf/ns:CdtTrfTxInf/ns:Purp")  
For Each n In nodes
	n.parentNode.insertBefore node.cloneNode(True),n
Next
xmldoc.save strPath
Member: joergsworld
joergsworld Oct 13, 2017 at 14:40:23 (UTC)
Goto Top
Vielen Dank! Mit der Testdatei hat alles geklappt. Mit der echten kompletten Datei kämpfe ich noch.

Viele Grüße
Member: colinardo
colinardo Oct 13, 2017 at 15:01:19 (UTC)
Goto Top
Zitat von @joergsworld:

Vielen Dank! Mit der Testdatei hat alles geklappt. Mit der echten kompletten Datei kämpfe ich noch.
Falls du letzten Endes doch nicht klar kommen solltest, melde dich einfach nochmal.

Grüße Uwe