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
GELÖST

Wert in mehreren XML Dateien per Script ersetzen

Frage Entwicklung Batch & Shell

Mitglied: PaketJockey

PaketJockey (Level 1) - Jetzt verbinden

18.02.2015 um 00:33 Uhr, 777 Aufrufe, 5 Kommentare

Hallo zusammen,

habe an meinem Logistik-Arbeitsplatz folgendes Problem:

Wir bekommen täglich massig elektronische Lieferscheine als XML Dateien. Darin müsste die falsche ILN im Bereich ShipToParty (Zeile 32) ersetzt werden (Die ILNs bei Vendor [Zeile 20] und OrderingParty [Zeile 26] sollen unangetastet bleiben).
Die zu ändernde ILN hat aktuell immer entweder den Wert A oder den Wert B. Nun soll sie durch die korrekten ILNs C und D ersetzt werden (C ersetzt immer A; D ersetzt immer B).

Hättet Ihr mir da ein kleines VBS parat so a la "wenn ILN = A dann ersetzte durch Fixwert C; wenn ILN = B dann ersetzte durch Fixwert D" ?

Dann lass ich das über den entsprechenden Ordner laufen und muss nicht mehr von Hand in Dutzenden XMLs rumpasten.
Besonders nervig: du hast im Clipboard die eine ILN, musst aber ständig wechseln, weil du nicht siehst welche ILN dich in der Datei erwartet. Ja, lacht nicht, so steinzeitmäßig geht das hier

Ich habe diesen Thread schon durchgelesen http://www.administrator.de/frage/inhalt-xml-datei-batch-script-%C3%A4n ... aber das passt nicht so recht auf meinen Fall.


btw: natürlich wäre es einfacher, wenn unsere Lieferanten die korrekten ILNs in ihren Stammdaten ändern würden, aber das ist nicht in Sicht.

Wäre echt nett wenn Ihr mir helfen könntet.

Grüße
PJ

So sieht der relevante teil der XML Datei aus.

01.
<?xml version="1.0" encoding="UTF-8"?> 
02.
<DeliveryNote> 
03.
 <Type>DESADV</Type> 
04.
 <MessageDate>bla</MessageDate> 
05.
 <Test>0</Test> 
06.
<Header> 
07.
 <DocumentID>1234</DocumentID> 
08.
 <DocumentDate>bla</DocumentDate> 
09.
 <DeliveryDate>bla</DeliveryDate> 
10.
 <ShippingDate>bla</ShippingDate> 
11.
 <Courier>maersk</Courier> 
12.
<Incoterms> 
13.
 <Key>FH</Key> 
14.
 <Description>Frei Haus; Liefertermin = ET</Description> 
15.
 </Incoterms> 
16.
<TradingPartners> 
17.
<Vendor> 
18.
<Identifier> 
19.
 <PartnerID>999</PartnerID> 
20.
 <ILN>888</ILN> 
21.
 </Identifier> 
22.
 </Vendor> 
23.
<OrderingParty> 
24.
<Identifier> 
25.
 <PartnerID>777</PartnerID> 
26.
 <ILN>666</ILN> 
27.
 </Identifier> 
28.
 </OrderingParty> 
29.
<ShipToParty> 
30.
<Identifier> 
31.
 <PartnerID>555</PartnerID> 
32.
 <ILN>A</ILN> 
33.
 </Identifier> 
34.
 </Header> 
35.
 </DeliveryNote>
Mitglied: Friemler
LÖSUNG 18.02.2015, aktualisiert um 11:24 Uhr
Hallo PJ,

teste mal folgendes:
01.
strILN_A = "A" 
02.
strILN_B = "B" 
03.
strILN_C = "C" 
04.
strILN_D = "D" 
05.
 
06.
If WScript.Arguments.Count > 0 Then 
07.
  strFolder = WScript.Arguments(0) 
08.
Else 
09.
  strFolder = "." 
10.
End If 
11.
   
12.
Set objFSO    = CreateObject("Scripting.FileSystemObject") 
13.
Set objXmlDoc = CreateObject("Microsoft.XMLDOM") 
14.
 
15.
objXmlDoc.async            = False 
16.
objXmlDoc.validateOnParse  = False 
17.
objXmlDoc.resolveExternals = False 
18.
 
19.
If objFSO.FolderExists(strFolder) Then 
20.
  For Each objFile In objFSO.GetFolder(strFolder).Files 
21.
    If UCase(objFSO.GetExtensionName(objFile.Name)) = "XML" Then 
22.
      strFile = objFile.Path 
23.
      objXmlDoc.load(strFile) 
24.
 
25.
      If objXmlDoc.parseError.errorCode = 0 Then 
26.
        Set objNode = objXmlDoc.documentElement.SelectSingleNode("//DeliveryNote/Header/TradingPartners/ShipToParty/Identifier/ILN") 
27.
 
28.
        If Not objNode Is Nothing Then 
29.
          If objNode.Text = strILN_A Then 
30.
            objNode.Text = strILN_C 
31.
          ElseIf objNode.Text = strILN_B Then 
32.
            objNode.Text = strILN_D 
33.
          End If 
34.
           
35.
          objXmlDoc.save(strFile) 
36.
        Else 
37.
          WScript.Echo "Der Aufbau des XML-Dokuments" & vbNewLine & _ 
38.
                       strFile                        & vbNewLine & _ 
39.
                       "weicht vom Standard-Schema ab." 
40.
        End If 
41.
      Else 
42.
        WScript.Echo "Das XML-Dokument" & vbNewLine & _ 
43.
                     strFile            & vbNewLine & _ 
44.
                     "ist fehlerhaft." 
45.
      End If 
46.
    End If 
47.
  Next 
48.
Else 
49.
  WScript.Echo "Das angegebene Verzeichnis existiert nicht" 
50.
End If
Die Zeilen 1-4 musst Du anpassen, hier werden die zu ersetzenden und die neuen Werte der ILNs eingetragen.

Um das Script aufzurufen, kannst Du es in das Verzeichnis mit den XML-Dateien kopieren und dort per Doppelklick oder über eine Verknüpfung starten. Du kannst auch das Icon des XML-Verzeichnisses mit der Maus auf das Icon des Scripts ziehen und fallen lassen.

Gruß
Friemler
Bitte warten ..
Mitglied: Endoro
18.02.2015, aktualisiert um 06:16 Uhr
Hey,
zwischen Zeile 33 und 34 fehlt </ShipToParty> in deinem Beispiel.
Mit GNU sed sieht die Lösung so aus:
01.
sed -ir "/<ShipToParty>/{:b;n;/<ILN>/{s/A/C/;t;s/B/D/;t};s#</ShipToParty>#&#;t;bb}" *.xml
Wenn die zu suchende Zeichenkette Regex-Steuerzeichen .*/\ enthält, müssen die mit Backslash escaped werden.
Gruß, Endoro
Bitte warten ..
Mitglied: 114757
18.02.2015, aktualisiert um 08:12 Uhr
Oder als Powershell-Script so:
(Zeile 1 die zugehörigen Werte eintragen und in Zeile 2 den Pfad zu den XML-Dateien ändern)
01.
$werte = @{'A'='555';'B'='666'} 
02.
$files = gci "c:\Ordner\*.xml" 
03.
$files | %{ 
04.
    $xml = [xml](gc $_.Fullname) 
05.
    $werte.GetEnumerator() | %{ 
06.
         $iln = $xml.DeliveryNote.Header.TradingPartners.ShipToParty.Identifier.ILN 
07.
        if ($iln -eq $_.Name){ 
08.
            $xml.DeliveryNote.Header.TradingPartners.ShipToParty.Identifier.ILN = $_.Value 
09.
10.
11.
    $xml.Save($_.Fullname) 
12.
}
Gruß jodel32
Bitte warten ..
Mitglied: PaketJockey
18.02.2015 um 11:22 Uhr
Hallo,

also erstmal DANKE an alle für die prompten Antworten.

@Friemler: Läuft perfekt, wird verwendet...Weiterverarbeitung der Dateien verfolgt; alles toll. Danke

@Endoro: Wollte zuerst Deine Version verwenden, klappt irgendwie nicht...Datei bleibt unverändert, es wird im entsprechenden Verzeichnis lediglich eine XMLR Datei mit gleichem Namen erzeugt; ebenfalls unverändert vom Inhalt. Trotzdem danke

Grüße
PJ
Bitte warten ..
Mitglied: Endoro
18.02.2015 um 13:10 Uhr
Hey,
ohne komplette Kommandozeile kann ich das hier nicht nachvollziehen.
Gruß, Endoro
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Script zum XML Datei Umschreiben
Frage von cberndtBatch & Shell12 Kommentare

Guten Tag. Ich habe folgendes Problem. Ich habe eine XML Datei mit meinen Gutscheincodes sowie weiter Daten aus meiner ...

XML
Manipulation von XML Dateien - Werte Zuordnung zwischen zwei Dateien
gelöst Frage von FRANHEXML19 Kommentare

Hallo zusammen, ich habe eine Frage bzgl. Manipulation von XML Dateien. Da ich auf diesem Gebiet sehr neu bin ...

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> ...

Datenbanken
Werte aus einer Tabelle ersetzen Werte aus einer anderen Tabelle
Frage von neotm1Datenbanken2 Kommentare

Hallo, ich versuche mit MSSQL eine Abfrage hinzubekommen, in der Werte Aus Tabelle1 Spalte2 in eine andere Tabelle schreibt, ...

Neue Wissensbeiträge
Datenschutz

Weitere Inforamtionen zum Sicherheitsproblem BeA

Information von Penny.Cilin vor 30 MinutenDatenschutz

Im folgenden ein weiterer Bericht über die Sicherheitsprobleme von Bea. Fataler Konstruktionsfehler im besonderen elektronischen Anwaltspostfach Gruss Penny

Windows 10

Systemdienste behalten nach Win10 inplace-Upgrade nicht die ggf. modifizierte Startart bei

Tipp von DerWoWusste vor 1 StundeWindows 103 Kommentare

Stellt Euch vor, Ihr habt ein Win10 System und modifiziert dort die Startart von Systemdiensten. Zum Beispiel wollt Ihr ...

Microsoft Office

Deaktivieren von Startbildschirm und Backstage-Ansicht in Office 2016 per Batch-Datei

Anleitung von SarekHL vor 5 StundenMicrosoft Office17 Kommentare

Guten Morgen zusammen! Ich habe mir gestern (auch mit Hilfe dieses Boards) ein Script gebastelt, um in Office 2016 ...

Erkennung und -Abwehr

Sicherheitslücke Spectre und Meltdown: Status prüfen

Anleitung von Frank vor 10 StundenErkennung und -Abwehr2 Kommentare

Nach all den Updates der letzten Woche sollte man unbedingt auch den Status prüfen, ob die Sicherheitslücken Spectre, Meltdown ...

Heiß diskutierte Inhalte
Netzwerke
NTFS-Berechtigung
Frage von Daoudi1973Netzwerke23 Kommentare

Hallo zusammen und frohes neues Jahr (Sorry, ich bin spät dran) Meine Frage: 1- Ich habe einen Ordner im ...

Microsoft Office
Deaktivieren von Startbildschirm und Backstage-Ansicht in Office 2016 per Batch-Datei
Anleitung von SarekHLMicrosoft Office17 Kommentare

Guten Morgen zusammen! Ich habe mir gestern (auch mit Hilfe dieses Boards) ein Script gebastelt, um in Office 2016 ...

Drucker und Scanner
Gesucht DIN A3 Drucker
Frage von NebellichtDrucker und Scanner15 Kommentare

Hallo, ich möchte einen neuen DIN A3 Drucker kaufen. Um ab und zu, ca. 1 mal die Woche Farbausdrucke ...

E-Business
Bankgeheimnis abgeschafft - wie kann ich mich wehren?
Frage von honeybeeE-Business13 Kommentare

Hallo, ich nehme Bezug auf diesen Artikel: Als ich das gelesen habe, wurde mir schlecht Es geht ja niemanden ...