Aus einer XML-Datei mehrere Daten auslesen und in einer bestimmten Syntax in eine Excel-Datei speichern
Guten Tag,
ich habe hier eine xml datei (ausschnitt am ende meines Posts) in der Daten aus einer Datenbank gespeichert werden. unter CUSTS > CUST > BILLING_ADDRESS sind 2 Tags die ich brauche, NAME1 und PHONE1 die müsste ich auslesen und in eine excel Tabelle einfügen, wo sie dann NUR in der ersten Spalte gespeichert werden sollen. Die erste Zeile bleibt frei und danach bekommt jedes NAME1/PHONE1 Paar eine Zeile die so aufgebaut sein muss:
aus der Telefonnummer der XML Datei muss auch noch das / entfernt werden.
Dieses Muster wiederholt sich unbestimmt oft!
Ich hoffe das mir jemand bei meinem Problem helfen kann und bedanke mich schonmal im vorraus für die Hilfe!
Mit freundlichen Grüßen
LocXar
ich habe hier eine xml datei (ausschnitt am ende meines Posts) in der Daten aus einer Datenbank gespeichert werden. unter CUSTS > CUST > BILLING_ADDRESS sind 2 Tags die ich brauche, NAME1 und PHONE1 die müsste ich auslesen und in eine excel Tabelle einfügen, wo sie dann NUR in der ersten Spalte gespeichert werden sollen. Die erste Zeile bleibt frei und danach bekommt jedes NAME1/PHONE1 Paar eine Zeile die so aufgebaut sein muss:
NAME1,,,"PHONE1","NAME1"
aus der Telefonnummer der XML Datei muss auch noch das / entfernt werden.
<!DOCTYPE CUSTS SYSTEM "Customer.dtd" >
<CUSTS>
<CUST>
<CUSTID></CUSTID>
<DESC></DESC>
<CURR></CURR>
<TAX></TAX>
<EUVAT/>
<A1TAXATION></A1TAXATION>
<PLACEOFUNLOADING/>
<PLANTKEY/>
<PAYTERMS></PAYTERMS>
<PAYMODE/>
<PAYDAYS></PAYDAYS>
<CASHDISCDAY1></CASHDISCDAY1>
<CASHDISCDAY2></CASHDISCDAY2>
<CASHDISCPER1></CASHDISCPER1>
<CASHDISCPER2></CASHDISCPER2>
<PAYBEHAV/>
<LOCKED></LOCKED>
<DISC></DISC>
<SALESAGENT></SALESAGENT>
<PRICELIST></PRICELIST>
<DISCLIST></DISCLIST>
<PROCEEDCODE></PROCEEDCODE>
<ISCOMMISSION></ISCOMMISSION>
<PRICEFLAG></PRICEFLAG>
<DISCGROUP/>
<REFERENZ/>
<REFERENZNR/>
<HOMEPAGE/>
<LETTERADDRESS/>
<LANGUAGE></LANGUAGE>
<ADDRESSAWKZ/>
<KTOAWKZ/>
<ADDRESSGROUP></ADDRESSGROUP>
<KTOGROUP/>
<CONTACT></CONTACT>
<MEMOKTO/>
<FORMULAR/>
<KTOTYP/>
<KOSTENSTELLE/>
<KOSTENTRAEGER/>
<TRANSPORTMODE/>
<BUSINESSTYPE/>
<TOUR></TOUR>
<SHIPMENTTYPE/>
<DELIVERYCOND/>
<PARTDELIVERY></PARTDELIVERY>
<BILLING_ADDRESS>
<ADDRESS/>
<NAME1>Name</NAME1>
<NAME2></NAME2>
<NAME3/>
<STREET/>
<ZIP/>
<CITY/>
<COUNTRY/>
<PHONE1>0123/456789</PHONE1>
<PHONE2/>
<FAX>0123/4567890</FAX>
<EMAIL/>
</BILLING_ADDRESS>
<SHIPPING_ADDRESS>
<ADDRESS/>
<NAME1></NAME1>
<NAME2></NAME2>
<NAME3/>
<STREET></STREET>
<ZIP></ZIP>
<CITY></CITY>
<COUNTRY></COUNTRY>
<PHONE1></PHONE1>
<PHONE2/>
<FAX></FAX>
<EMAIL/>
</SHIPPING_ADDRESS>
<PERSONTOTURNTO>
<PERSON2TURN2></PERSON2TURN2>
<GROUP/>
<TITLE/>
<PNAME1/>
<PNAME2/>
<POSITION></POSITION>
<DIVISION/>
<LETTERADDRESS1/>
<LETTERADDRESS2></LETTERADDRESS2>
<LETTERADDRESS3></LETTERADDRESS3>
<PPHONE/>
<PFAX/>
<PMOBIL/>
<PHONEPRIVAT/>
<PHONECAR/>
<PEMAIL/>
<BIRTHDAY/>
<PMEMO/>
</PERSONTOTURNTO>
</CUST>
<CUST>
...
Ich hoffe das mir jemand bei meinem Problem helfen kann und bedanke mich schonmal im vorraus für die Hilfe!
Mit freundlichen Grüßen
LocXar
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 251868
Url: https://administrator.de/contentid/251868
Ausgedruckt am: 18.11.2024 um 05:11 Uhr
2 Kommentare
Neuester Kommentar
Hallo LocXar,
kannst du mit folgendem Code in einem Excel-Dokument machen (In Zeile 4 den Pfad zu XML-Datei eingeben):
Grüße Uwe
kannst du mit folgendem Code in einem Excel-Dokument machen (In Zeile 4 den Pfad zu XML-Datei eingeben):
Sub ImportXMLData()
Dim ws As Worksheet, rngOut As Range, fso as Object, xmldoc as Object, strContent as Variant
'Pfad zur XML-Datei
Const XMLPATH = "C:\temp\customers.xml"
'Objekte erstellen
Set fso = CreateObject("Scripting.Filesystemobject")
Set xmldoc = CreateObject("msxml2.domdocument.6.0")
'Anfangszelle des Ausgabebereichs bestimmen Tabellenblatt 1 Zelle A2
Set rngOut = Sheets(1).Range("A2")
'XML-Datei einlesen und die erste Zeile 'wegsplitten' damit das Dokument vom XML-Object korrekt interpretiert werden kann (Die DTD stört in diesem Fall in der Definition)
strContent = Split(fso.OpenTextFile(XMLPATH).ReadAll(), vbNewLine, 2)
xmldoc.validateOnParse = False
xmldoc.LoadXML (strContent(1))
'gewünschte Nodes mit XPATH selektieren
Set Nodes = xmldoc.SelectNodes("/CUSTS/CUST/BILLING_ADDRESS")
'für jeden gefundenen Knoten ...
For Each Node In Nodes
'Werte der gewünschten Elemente holen
strNAME1 = Node.SelectSingleNode("NAME1").Text
'Slashes in der Telefonnummer ersetzen
strPHONE1 = Replace(Node.SelectSingleNode("PHONE1").Text, "/", "", 1, -1, vbTextCompare)
'Werte in die Ausgabezeile schreiben
rngOut.Value = strNAME1 & ",,,""" & strPHONE1 & """,""" & strNAME1 & """"
'Zeile um eins nach unten verschieben
Set rngOut = rngOut.Offset(1, 0)
Next
'Objekte releasen
Set xmldoc = Nothing
Set fso = Nothing
End Sub