joergsworld

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>
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

Content-ID: 351418

Url: https://administrator.de/forum/xml-datei-knoten-an-einer-bestimmten-stelle-automatisch-hinfuegen-351418.html

Ausgedruckt am: 04.05.2025 um 08:05 Uhr

colinardo
colinardo 11.10.2017 aktualisiert um 17:07:29 Uhr
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.
joergsworld
joergsworld 11.10.2017 um 16:45:23 Uhr
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
colinardo
colinardo 11.10.2017 um 17:06:49 Uhr
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
joergsworld
joergsworld 13.10.2017 um 16:40:23 Uhr
Goto Top
Vielen Dank! Mit der Testdatei hat alles geklappt. Mit der echten kompletten Datei kämpfe ich noch.

Viele Grüße
colinardo
colinardo 13.10.2017 um 17:01:19 Uhr
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