Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Frage Entwicklung Batch & Shell

GELÖST

Inhalt bzw. Zeilen in XML File mit Script hinzufügen

Mitglied: riatnep

riatnep (Level 1) - Jetzt verbinden

07.10.2013, aktualisiert 11:16 Uhr, 2085 Aufrufe, 4 Kommentare

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:
01.
<?xml version="1.0" encoding="utf-8" ?> 
02.
<Document> 
03.
<CstmrCdtTrfInitn> 
04.
<GrpHdr> 
05.
<MsgId>20130619001</MsgId>  
06.
<CreDtTm>2013-06-19T14:22:08</CreDtTm>  
07.
<NbOfTxs>1</NbOfTxs>  
08.
<CtrlSum>100.00</CtrlSum>  
09.
<InitgPty> 
10.
<Nm>Company Name</Nm>  
11.
<Id> 
12.
<OrgId> 
13.
<Othr> 
14.
<Id>123456789</Id>  
15.
</Othr> 
16.
</OrgId> 
17.
</Id> 
18.
</InitgPty> 
19.
</GrpHdr> 
20.
</CstmrCdtTrfInitn> 
21.
</Document> 
22.
 
Ist:
01.
<?xml version="1.0" encoding="utf-8" ?> 
02.
<Document> 
03.
<CstmrCdtTrfInitn> 
04.
<GrpHdr> 
05.
<MsgId>2013/06/19001</MsgId>  
06.
<CreDtTm>2013-06-19T14:22:08</CreDtTm>  
07.
<NbOfTxs>1</NbOfTxs>  
08.
<CtrlSum>100.00</CtrlSum>  
09.
<InitgPty> 
10.
<Nm>Company Name</Nm>  
11.
</InitgPty> 
12.
</GrpHdr> 
13.
</CstmrCdtTrfInitn> 
14.
</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:
http://www.administrator.de/frage/inhalt-einer-xml-datei-per-batch-bzw- ...

Wäre super wenn Ihr Eure Ideen mit einbirngen könntet.

Viele Grüße
Steffen
Mitglied: colinardo
07.10.2013, aktualisiert um 12:52 Uhr
Hallo Steffen,
probiers mal hiermit: (in Zeile 1 und 2 jeweils noch die Pfade anpassen)
01.
strXMLINPUT = "c:\input.xml" 
02.
strXMLOUTPUT = "c:\output.xml" 
03.
Set xmlDoc = CreateObject("Msxml2.DOMDocument.6.0") 
04.
xmlDoc.Load strXMLINPUT 
05.
 
06.
'korrigiere MsgId 
07.
Set nodeDatum = xmlDoc.selectSingleNode("/Document/CstmrCdtTrfInitn/GrpHdr/MsgId") 
08.
nodeDatum.firstChild.nodeValue= Replace(nodeDatum.firstChild.nodeValue,"/","") 
09.
 
10.
'hole Referenz zum Einfüge-Element in das die neuen Elemente eingefügt werden 
11.
Set insertNode = xmlDoc.selectSingleNode("/Document/CstmrCdtTrfInitn/GrpHdr/InitgPty") 
12.
 
13.
'erzeuge Elemente 
14.
Set node_Id = xmlDoc.createElement("Id") 
15.
Set node_OrgId = xmlDoc.createElement("OrgId") 
16.
Set node_Othr = xmlDoc.createElement("Othr") 
17.
Set node_Othr_Id = xmlDoc.createElement("Id") 
18.
Set node_Othr_Id_Text = xmldoc.createTextNode("123456789") 
19.
 
20.
'hänge die Elemente aneinander  
21.
node_Othr_Id.appendChild(node_Othr_Id_Text) 
22.
node_Othr.appendChild(node_Othr_Id) 
23.
node_OrgId.appendChild(node_Othr) 
24.
node_Id.appendChild(node_OrgId) 
25.
insertNode.appendChild(node_Id) 
26.
 
27.
' Stylesheet: XML Dokument schön formatieren 
28.
Set oXsltDoc = CreateObject("Msxml2.DOMDocument.6.0") 
29.
oXsltDoc.async = False 
30.
oXsltDoc.loadXML( _ 
31.
  "<?xml version=""1.0"" encoding=""windows-1252""?>" & vbNewLine & _ 
32.
  "<xsl:stylesheet version=""1.0"" xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"">" & vbNewLine & _ 
33.
  "	<xsl:output method=""xml"" version=""1.0"" encoding=""UTF-8"" indent=""yes"" />" & vbNewLine & _ 
34.
  "	<xsl:template match=""node()|@*"">" & vbNewLine & _ 
35.
  "		<xsl:copy>" & vbNewLine & _ 
36.
  "			<xsl:apply-templates select=""node()|@*"" />" & vbNewLine & _ 
37.
  "		</xsl:copy>" & vbNewLine & _ 
38.
  "	</xsl:template>" & vbNewLine & _ 
39.
  "</xsl:stylesheet>") 
40.
xmlDoc.transformNodeToObject oXsltDoc, xmlDoc 
41.
 
42.
'speichere XML als neues Dokument 
43.
xmlDoc.save(strXMLOUTPUT) 
44.
 
45.
Set xmlDoc = Nothing 
46.
Set oXsltDoc = Nothing
Grüße Uwe
Bitte warten ..
Mitglied: riatnep
07.10.2013 um 16:13 Uhr
Hallo Uwe,

vielen Dank. Dein Script funktioniert wunderbar.

Leider habe ich bei meinem oberen Post die XML ein bisschen gekürzt.

Der Kopf der XML ist im Original nicht

01.
<?xml version="1.0" encoding="utf-8" ?> 
02.
<Document>
sondern
01.
<?xml version="1.0" encoding="utf-8"?> 
02.
<!-- Created with Liquid XML Studio - FREE Community Edition 7.1.6.1440 (http://www.liquid-technologies.com) --> 
03.
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.002.03" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:pain.001.002.03 pain.001.002.03.xsd">
wenn ich <Document> anpasse funktioniert es. Jedoch steht hier leider noch der Ratten### dahinter. Hast du hierfür noch eine Lösung?

Viele Grüße
Steffen
Bitte warten ..
Mitglied: colinardo
07.10.2013, aktualisiert 08.10.2013
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 ):
01.
strXMLINPUT = "c:\input.xml" 
02.
strXMLOUTPUT = "c:\output.xml" 
03.
Set xmlDoc = CreateObject("Msxml2.DOMDocument.6.0") 
04.
xmldoc.validateOnParse = False 
05.
xmlDoc.async = False 
06.
xmlDoc.Load strXMLINPUT 
07.
If xmlDoc.parseError.errorCode <> 0 Then 
08.
	WScript.Echo xmlDoc.parseError.reason 
09.
	WScript.Quit 1 
10.
End If 
11.
'Setze Namespaces 
12.
strNS = "urn:iso:std:iso:20022:tech:xsd:pain.001.002.03" 
13.
xmlDoc.setProperty "SelectionLanguage", "XPath" 
14.
xmlDoc.setProperty "SelectionNamespaces", "xmlns:default=""" & strNS & """" 
15.
 
16.
Set oDoc = xmlDoc.documentElement 
17.
 
18.
'korrigiere MsgId 
19.
Set nodeDatum = oDoc.selectSingleNode("//default:MsgId") 
20.
nodeDatum.firstChild.nodeValue= Replace(nodeDatum.firstChild.nodeValue,"/","") 
21.
 
22.
'hole Referenz zum Einfüge-Element in das die neuen Elemente eingefügt werden 
23.
Set insertNode = oDoc.selectSingleNode("//default:InitgPty") 
24.
 
25.
'erzeuge Elemente 
26.
Set node_Id = xmlDoc.createNode(1,"Id",strNS) 
27.
Set node_OrgId = xmlDoc.createNode(1,"OrgId",strNS) 
28.
Set node_Othr = xmlDoc.createNode(1,"Othr",strNS) 
29.
Set node_Othr_Id = xmlDoc.createNode(1,"Id",strNS) 
30.
Set node_Othr_Id_Text = xmldoc.createTextNode("123456789") 
31.
 
32.
'hänge die Elemente aneinander  
33.
node_Othr_Id.appendChild(node_Othr_Id_Text) 
34.
node_Othr.appendChild(node_Othr_Id) 
35.
node_OrgId.appendChild(node_Othr) 
36.
node_Id.appendChild(node_OrgId) 
37.
insertNode.appendChild(node_Id) 
38.
 
39.
' Stylesheet: XML Dokument schön formatieren 
40.
Set oXsltDoc = CreateObject("Msxml2.DOMDocument.6.0") 
41.
oXsltDoc.async = False 
42.
oXsltDoc.loadXML( _ 
43.
  "<?xml version=""1.0"" encoding=""windows-1252""?>" & vbNewLine & _ 
44.
  "<xsl:stylesheet version=""1.0"" xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"">" & vbNewLine & _ 
45.
  "	<xsl:output method=""xml"" version=""1.0"" encoding=""UTF-8"" indent=""yes"" />" & vbNewLine & _ 
46.
  "	<xsl:template match=""node()|@*"">" & vbNewLine & _ 
47.
  "		<xsl:copy>" & vbNewLine & _ 
48.
  "			<xsl:apply-templates select=""node()|@*"" />" & vbNewLine & _ 
49.
  "		</xsl:copy>" & vbNewLine & _ 
50.
  "	</xsl:template>" & vbNewLine & _ 
51.
  "</xsl:stylesheet>") 
52.
xmlDoc.transformNodeToObject oXsltDoc, xmlDoc 
53.
 
54.
'speichere XML als neues Dokument 
55.
xmlDoc.save(strXMLOUTPUT) 
56.
 
57.
Set xmlDoc = Nothing 
58.
Set oXsltDoc = Nothing
Grüße Uwe
Bitte warten ..
Mitglied: riatnep
08.10.2013 um 08:18 Uhr
Hallo Uwe,

nun funktioniert alles einwandfrei! Vielen Dank für die tolle Unterstützung.

Viele Grüße
Steffen
Bitte warten ..
Ähnliche Inhalte
VB for Applications
Inhalt einer XML Datei Script ändern
gelöst Frage von chris27584VB for Applications4 Kommentare

Hallo zusammen, in folgendem Script <?xml version="1.0"?> -<SkClientConfig xmlns:xsi=" xmlns:xsd=" <LastServerIndex>1</LastServerIndex> <LastUser>11111</LastUser> <LastWorkplace>2358</LastWorkplace> -<SerializableFont> <FontValue>Microsoft Sans Serif; 8,25pt</FontValue> </SerializableFont> ...

Batch & Shell
XML-Inhalt austauschen
gelöst Frage von noscriptBatch & Shell9 Kommentare

Hallo zusammen Nachdem ich nun das komplette Internet gefühlt zwei Mal gelesen, aber nicht kapiert habe, versuch ichs nun ...

Batch & Shell
Inhalt von XML-Dateien ändern
gelöst Frage von Kedi123Batch & Shell14 Kommentare

Hallo zusammen, wir haben täglich viele XML-Dateien, die unter anderem jeweils eine Festplattengröße in Byte enthalten (Zeile 16). Um ...

XML
CSharp XML node hinzufügen
gelöst Frage von Sirius91XML2 Kommentare

Hallo liebe Community, wahrscheinlich ist die Antwort sehr simpel aber ich komme einfach nicht darauf bzw. finde nicht der ...

Neue Wissensbeiträge
Linux

Meltdown und Spectre: Linux Update

Information von Frank vor 12 StundenLinux1 Kommentar

Meltdown (Variante 3 des Prozessorfehlers) Der Kernel 4.14.13 mit den Page-Table-Isolation-Code (PTI) ist nun für Fedora freigegeben worden. Er ...

Tipps & Tricks

Solutio Charly Updater Fehlermeldung: Das Abgleichen der Dateien in -Pfad- mit dem Datenobject ist fehlgeschlagen

Tipp von StefanKittel vor 1 TagTipps & Tricks

Hallo, hier einmal als Tipp für alle unter Euch die mit der Zahnarztabrechnungssoftware Charly von Solutio zu tun haben. ...

Sicherheit

Meltdown und Spectre: Wir brauchen eine "Abwrackprämie", die die CPU-Hersteller bezahlen

Information von Frank vor 1 TagSicherheit12 Kommentare

Zum aktuellen Thema Meltdown und Spectre: Ich wünsche mir von den CPU-Herstellern wie Intel, AMD oder ARM eine Art ...

Sicherheit

Meltdown und Spectre: Realitätscheck

Information von Frank vor 1 TagSicherheit9 Kommentare

Die unangenehme Realität Der Prozessorfehler mit seinen Varianten Meltdown und Spectre ist seit Juni 2017 bekannt. Trotzdem sind immer ...

Heiß diskutierte Inhalte
Sicherheit
Meltdown und Spectre: Die machen uns alle was vor
Information von FrankSicherheit24 Kommentare

Aktuell sieht es in den Medien so aus, als hätten die Hersteller wie Intel, Microsoft und Co den aktuellen ...

Ubuntu
Ubuntu - Starter für nicht vertrauenswürdige Anwendungen
Frage von adm2015Ubuntu17 Kommentare

Hallo zusammen, Ich verwende derzeit die Ubuntu Versionen 17.10 bzw. im Test 18.04. Ich habe mehrere .desktop Dateien in ...

Netzwerke
Packet loss bei "InternetLeitungsvollauslastung"
gelöst Frage von Freak-On-SiliconNetzwerke17 Kommentare

Servus; Ja der Titel klingt komisch, is aber so. Wenn die Internetleitung voll ausgelastet ist, hab ich extreme packet ...

Windows 10
Automatische daten kopieren, USB zu USB unter Win10 im Hintergrund
Frage von DerEisigeWindows 1016 Kommentare

Hallo Leute, ich bin auf der Suche nach einem Skript, dass von einem USB Stick automatisch nach dem einstecken ...