02.11.2022, 13:47
Hallo,
ich habe eine XML die ich gern auslesen und nur die Werte in ein Blatt schreiben möchte. Es gibt diverse leere Abgaben die ich nicht benötige.
Problem hier ist für mich, dass ich nicht weiß wie man die einzelnen Ebenen durchlaufen und auslesen kann.
Ein kleiner Auszug aus einer XML Datei mit mehreren Ebenen. Es können weitere Ebenen vorhanden sein, die noch tiefer gehen.
Ich möchte "Basis_3" auslesen.
Was ich bisher gemacht habe in VBA. Einlesen der XML als MSXML2.DOMDocument. Das klappt.
Ich weiß das ist der kleinste Teil. Aber wie kann man die einzelnen ChildNodes und tieferen ChildNodes ALLE durchlaufen? Mir fehlt hier der Ansatz wie man das am besten macht. Hat jemand eine Idee oder Anregung für mich?
Bin über jede Anregung, Link zu Webseiten dankbar.
VG
Kinopio
ich habe eine XML die ich gern auslesen und nur die Werte in ein Blatt schreiben möchte. Es gibt diverse leere Abgaben die ich nicht benötige.
Problem hier ist für mich, dass ich nicht weiß wie man die einzelnen Ebenen durchlaufen und auslesen kann.
Ein kleiner Auszug aus einer XML Datei mit mehreren Ebenen. Es können weitere Ebenen vorhanden sein, die noch tiefer gehen.
Ich möchte "Basis_3" auslesen.
Code:
<?xml version="1.0" encoding="utf-8"?>
<asx:abap version="1.0" xmlns:asx="http://www......">
<asx:values>
<CORR_XML>
<HEADER>
<SYSID>XXX</SYSID>
<MANDANT>0815</MANDANT>
<DPCM_IDENT>aaaaaaaaaaaaaaaaaaaaaa</DPCM_IDENT>
<CORR_AUTHORITY/>
<REPRINT/>
<DPCM_IDENT_ORIG/>
<SYBATCH/>
<BATCH_PRINT/>
<COLLECT_PRINT/>
<COLLECT_ALL>0</COLLECT_ALL>
<COLLECT_POS>0</COLLECT_POS>
<DRUCKJOB_IN_EX/>
</HEADER>
<BASIS_3>
<ADRESSES>
<_-BASE-AA03_STR_XML_BASIS_ADDRESS>
<ADDRNUMBER>000200000</ADDRNUMBER>
<DATE_FROM>0001-01-01</DATE_FROM>
<DATE_TO>9999-12-31</DATE_TO>
<TITLE>0001</TITLE>
<NAME1>Villain</NAME1>
<NAME2>Ganon</NAME2>
<NAME3/>
<NAME4/>
<NAME_TEXT>Ganon Villain,</NAME_TEXT>
<NAME_CO/>
<CITY1>Hyrule</CITY1>
<CITY2/>
<HOME_CITY/>
<POST_CODE1>04711</POST_CODE1>
<POST_CODE2/>
<POST_CODE3/>
<PO_BOX/>
<PO_BOX_LOC/>
<STREET>Hyrule-Weg</STREET>
<TAB_OBG>
<_-GKV_-PR03_ORDNUNGSBEGRIFFE>
<PARTNER>123456789</PARTNER>
<IDENTIFICATIONTYPE>ABCDDE</IDENTIFICATIONTYPE>
<IDENTIFICATIONNUMBER>A999888777</IDENTIFICATIONNUMBER>
<IDINSTITUTE/>
<IDENTRYDATE>1900-01-01</IDENTRYDATE>
<IDVALIDFROMDATE>1900-01-01</IDVALIDFROMDATE>
<IDVALIDTODATE>9999-12-31</IDVALIDTODATE>
</_-GKV_-PR03_ORDNUNGSBEGRIFFE>
<_-GKV_-PR03_ORDNUNGSBEGRIFFE>
<PARTNER>123456789</PARTNER>
<IDENTIFICATIONTYPE>ABCD</IDENTIFICATIONTYPE>
<IDENTIFICATIONNUMBER>99300222D000</IDENTIFICATIONNUMBER>
<IDINSTITUTE/>
<IDENTRYDATE>1900-01-01</IDENTRYDATE>
<IDVALIDFROMDATE>1900-01-01</IDVALIDFROMDATE>
<IDVALIDTODATE>9999-12-31</IDVALIDTODATE>
</_-GKV_-PR03_ORDNUNGSBEGRIFFE>
<_-GKV_-PR03_ORDNUNGSBEGRIFFE>
<PARTNER>123456789</PARTNER>
<IDENTIFICATIONTYPE>DEFG</IDENTIFICATIONTYPE>
<IDENTIFICATIONNUMBER>053719996666</IDENTIFICATIONNUMBER>
<IDINSTITUTE/>
<IDENTRYDATE>1900-01-01</IDENTRYDATE>
<IDVALIDFROMDATE>1900-01-01</IDVALIDFROMDATE>
<IDVALIDTODATE>9999-12-31</IDVALIDTODATE>
</_-GKV_-PR03_ORDNUNGSBEGRIFFE>
</TAB_OBG>
</_-BASE-AA03_STR_XML_BASIS_ADDRESS>
</ADRESSES>
</BASIS_3>
</CORR_XML>
</asx:values>
</asx:abap>
Was ich bisher gemacht habe in VBA. Einlesen der XML als MSXML2.DOMDocument. Das klappt.
Code:
Sub TEST()
Dim fso As Object, oFile As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Set oFile = fso.getfile(ThisWorkbook.Path & "\Forum.xml")
'### XML auslesen
Dim xmlObj As Object, nodesThatMatter As Object, _
Node As Object
Set xmlObj = CreateObject("MSXML2.DOMDocument")
xmlObj.async = False
xmlObj.validateOnParse = False
xmlObj.Load CStr(oFile)
Set nodesThatMatter = xmlObj.SelectNodes("//CORR_XML/Basis_3")
'Wie gehts es jetzt weiter?
For each node in nodesThatMatter '????
.....
Next
Ich weiß das ist der kleinste Teil. Aber wie kann man die einzelnen ChildNodes und tieferen ChildNodes ALLE durchlaufen? Mir fehlt hier der Ansatz wie man das am besten macht. Hat jemand eine Idee oder Anregung für mich?
Bin über jede Anregung, Link zu Webseiten dankbar.
VG
Kinopio