Inhalt bzw. Zeilen in XML File mit Script hinzufügen
Hallo zusammen,
ich habe schon ziemlich viel Zeit in diese Anforderung gesteckt, jedoch komme ich selbst nicht zur richtigen Lösung.
Wie kann ich in einer XML einige Zeilen zusätzlich per Script hinzufügen? Und in Zeile 5 <Msgid> sollen die "/" beim Datum entfernt werden.
Soll:
Ist:
Sprich die Zeilen von 11 bis 17 sollen immer nach <Nm Company Name </Nm> hinzugefügt werden. Diese hinzugefügten Zeilen sind fix und müssen nicht angepasst werden.
Die Datei mit dem neuen Inhalt soll als neue Datei im gleichen Verzeichnis mit anderem Namen abgelegt werden.
Ich habe versucht mich an diesen Beitrag zu halten:
Inhalt einer XML Datei per Batch bzw. Script ändern
Wäre super wenn Ihr Eure Ideen mit einbirngen könntet.
Viele Grüße
Steffen
ich habe schon ziemlich viel Zeit in diese Anforderung gesteckt, jedoch komme ich selbst nicht zur richtigen Lösung.
Wie kann ich in einer XML einige Zeilen zusätzlich per Script hinzufügen? Und in Zeile 5 <Msgid> sollen die "/" beim Datum entfernt werden.
Soll:
<?xml version="1.0" encoding="utf-8" ?>
<Document>
<CstmrCdtTrfInitn>
<GrpHdr>
<MsgId>20130619001</MsgId>
<CreDtTm>2013-06-19T14:22:08</CreDtTm>
<NbOfTxs>1</NbOfTxs>
<CtrlSum>100.00</CtrlSum>
<InitgPty>
<Nm>Company Name</Nm>
<Id>
<OrgId>
<Othr>
<Id>123456789</Id>
</Othr>
</OrgId>
</Id>
</InitgPty>
</GrpHdr>
</CstmrCdtTrfInitn>
</Document>
Ist:
<?xml version="1.0" encoding="utf-8" ?>
<Document>
<CstmrCdtTrfInitn>
<GrpHdr>
<MsgId>2013/06/19001</MsgId>
<CreDtTm>2013-06-19T14:22:08</CreDtTm>
<NbOfTxs>1</NbOfTxs>
<CtrlSum>100.00</CtrlSum>
<InitgPty>
<Nm>Company Name</Nm>
</InitgPty>
</GrpHdr>
</CstmrCdtTrfInitn>
</Document>
Sprich die Zeilen von 11 bis 17 sollen immer nach <Nm Company Name </Nm> hinzugefügt werden. Diese hinzugefügten Zeilen sind fix und müssen nicht angepasst werden.
Die Datei mit dem neuen Inhalt soll als neue Datei im gleichen Verzeichnis mit anderem Namen abgelegt werden.
Ich habe versucht mich an diesen Beitrag zu halten:
Inhalt einer XML Datei per Batch bzw. Script ändern
Wäre super wenn Ihr Eure Ideen mit einbirngen könntet.
Viele Grüße
Steffen
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 218653
Url: https://administrator.de/forum/inhalt-bzw-zeilen-in-xml-file-mit-script-hinzufuegen-218653.html
Ausgedruckt am: 27.12.2024 um 15:12 Uhr
4 Kommentare
Neuester Kommentar
Hallo Steffen,
probiers mal hiermit: (in Zeile 1 und 2 jeweils noch die Pfade anpassen)
Grüße Uwe
probiers mal hiermit: (in Zeile 1 und 2 jeweils noch die Pfade anpassen)
strXMLINPUT = "c:\input.xml"
strXMLOUTPUT = "c:\output.xml"
Set xmlDoc = CreateObject("Msxml2.DOMDocument.6.0")
xmlDoc.Load strXMLINPUT
'korrigiere MsgId
Set nodeDatum = xmlDoc.selectSingleNode("/Document/CstmrCdtTrfInitn/GrpHdr/MsgId")
nodeDatum.firstChild.nodeValue= Replace(nodeDatum.firstChild.nodeValue,"/","")
'hole Referenz zum Einfüge-Element in das die neuen Elemente eingefügt werden
Set insertNode = xmlDoc.selectSingleNode("/Document/CstmrCdtTrfInitn/GrpHdr/InitgPty")
'erzeuge Elemente
Set node_Id = xmlDoc.createElement("Id")
Set node_OrgId = xmlDoc.createElement("OrgId")
Set node_Othr = xmlDoc.createElement("Othr")
Set node_Othr_Id = xmlDoc.createElement("Id")
Set node_Othr_Id_Text = xmldoc.createTextNode("123456789")
'hänge die Elemente aneinander
node_Othr_Id.appendChild(node_Othr_Id_Text)
node_Othr.appendChild(node_Othr_Id)
node_OrgId.appendChild(node_Othr)
node_Id.appendChild(node_OrgId)
insertNode.appendChild(node_Id)
' Stylesheet: XML Dokument schön formatieren
Set oXsltDoc = CreateObject("Msxml2.DOMDocument.6.0")
oXsltDoc.async = False
oXsltDoc.loadXML( _
"<?xml version=""1.0"" encoding=""windows-1252""?>" & vbNewLine & _
"<xsl:stylesheet version=""1.0"" xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"">" & vbNewLine & _
" <xsl:output method=""xml"" version=""1.0"" encoding=""UTF-8"" indent=""yes"" />" & vbNewLine & _
" <xsl:template match=""node()|@*"">" & vbNewLine & _
" <xsl:copy>" & vbNewLine & _
" <xsl:apply-templates select=""node()|@*"" />" & vbNewLine & _
" </xsl:copy>" & vbNewLine & _
" </xsl:template>" & vbNewLine & _
"</xsl:stylesheet>")
xmlDoc.transformNodeToObject oXsltDoc, xmlDoc
'speichere XML als neues Dokument
xmlDoc.save(strXMLOUTPUT)
Set xmlDoc = Nothing
Set oXsltDoc = Nothing
Grüße Uwe
Hallo Steffen,
leider ist das XML-DOM-Objekt bei Namespaces sehr zickig. Daher ist es bei solchen Aufgaben essentiell, eventuell vorkommenden Namespaces zu erwähnen !
Für deinen Fall und wenn die nachfolgenden Elemente keine weiteren anderen Namespaces haben, müsste das hier funktionieren(außer du hast noch mehr Überraschungen parat ):
Grüße Uwe
leider ist das XML-DOM-Objekt bei Namespaces sehr zickig. Daher ist es bei solchen Aufgaben essentiell, eventuell vorkommenden Namespaces zu erwähnen !
Für deinen Fall und wenn die nachfolgenden Elemente keine weiteren anderen Namespaces haben, müsste das hier funktionieren(außer du hast noch mehr Überraschungen parat ):
strXMLINPUT = "c:\input.xml"
strXMLOUTPUT = "c:\output.xml"
Set xmlDoc = CreateObject("Msxml2.DOMDocument.6.0")
xmldoc.validateOnParse = False
xmlDoc.async = False
xmlDoc.Load strXMLINPUT
If xmlDoc.parseError.errorCode <> 0 Then
WScript.Echo xmlDoc.parseError.reason
WScript.Quit 1
End If
'Setze Namespaces
strNS = "urn:iso:std:iso:20022:tech:xsd:pain.001.002.03"
xmlDoc.setProperty "SelectionLanguage", "XPath"
xmlDoc.setProperty "SelectionNamespaces", "xmlns:default=""" & strNS & """"
Set oDoc = xmlDoc.documentElement
'korrigiere MsgId
Set nodeDatum = oDoc.selectSingleNode("//default:MsgId")
nodeDatum.firstChild.nodeValue= Replace(nodeDatum.firstChild.nodeValue,"/","")
'hole Referenz zum Einfüge-Element in das die neuen Elemente eingefügt werden
Set insertNode = oDoc.selectSingleNode("//default:InitgPty")
'erzeuge Elemente
Set node_Id = xmlDoc.createNode(1,"Id",strNS)
Set node_OrgId = xmlDoc.createNode(1,"OrgId",strNS)
Set node_Othr = xmlDoc.createNode(1,"Othr",strNS)
Set node_Othr_Id = xmlDoc.createNode(1,"Id",strNS)
Set node_Othr_Id_Text = xmldoc.createTextNode("123456789")
'hänge die Elemente aneinander
node_Othr_Id.appendChild(node_Othr_Id_Text)
node_Othr.appendChild(node_Othr_Id)
node_OrgId.appendChild(node_Othr)
node_Id.appendChild(node_OrgId)
insertNode.appendChild(node_Id)
' Stylesheet: XML Dokument schön formatieren
Set oXsltDoc = CreateObject("Msxml2.DOMDocument.6.0")
oXsltDoc.async = False
oXsltDoc.loadXML( _
"<?xml version=""1.0"" encoding=""windows-1252""?>" & vbNewLine & _
"<xsl:stylesheet version=""1.0"" xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"">" & vbNewLine & _
" <xsl:output method=""xml"" version=""1.0"" encoding=""UTF-8"" indent=""yes"" />" & vbNewLine & _
" <xsl:template match=""node()|@*"">" & vbNewLine & _
" <xsl:copy>" & vbNewLine & _
" <xsl:apply-templates select=""node()|@*"" />" & vbNewLine & _
" </xsl:copy>" & vbNewLine & _
" </xsl:template>" & vbNewLine & _
"</xsl:stylesheet>")
xmlDoc.transformNodeToObject oXsltDoc, xmlDoc
'speichere XML als neues Dokument
xmlDoc.save(strXMLOUTPUT)
Set xmlDoc = Nothing
Set oXsltDoc = Nothing
Grüße Uwe