Excel VBA XML-Nodes auslesen
Hallo zusammen,
ich lese eine XML-Datei mittels DOMDocument-Methode aus.
Ich möchte nun den Wert von <Text> aus der Stellenbezeichnung NrBez="text_2" auslesen.
Wie lässt sich das am einfachsten realisieren?
Ich würde gerne auch alle <Stellen> unter den <MWB> einzeln durchlaufen, jedoch kann ich diese leider nicht via "ChildNode" direkt ansprechen.
Die xmlMessBlockStellen und xmlMessBlockStelle ist immer NOTHING
<code >
sub test()
Dim xmlDoc As MSXML2.DOMDocument 'XML Datei
Dim xmlMessBloecke As IXMLDOMNodeList 'XML Knoten "Messwerteblöcke"
Dim xmlMessBlock As IXMLDOMNode 'XML Unterknoten "Messwerteblock"
dim MWBbez
Dim xmlMessBlockStellen As IXMLDOMNodeList 'XML Knoten "Messwerteblockstellen"
Dim xmlMessBlockStelle As IXMLDOMNode 'XML Unterknoten "Messwerteblockstelle"
dim MWBStelleBez
Set xmlMessBloecke = xmlDoc.SelectSingleNode("Messwertebloecke").ChildNodes
For Each xmlMessBlock In xmlMessBloecke
Set xmlMessBlockStellen = xmlMessBlock.SelectSingleNode("MWB").ChildNodes
MWBbez = xmlMessBlock.SelectSingleNode("Messwerteblock").Text 'hier im Beispiel "_Version_1"
For Each xmlMessBlockStelle In xmlMessBlockStellen
MWBStelleBez = xmlMessBlockStelle.SelectSingleNode("NrBez").Text 'hier im Beispiel ""
next
next
end sub
Danke und Gruß
Michael
ich lese eine XML-Datei mittels DOMDocument-Methode aus.
sub test()
Dim xmlDoc As MSXML2.DOMDocument 'XML Datei
Dim xmlMessBloecke As IXMLDOMNodeList 'XML Knoten "Messwerteblöcke"
Dim xmlMessBlock As IXMLDOMNode 'XML Unterknoten "Messwerteblock"
dim MWBbez
Set xmlMessBloecke = xmlDoc.SelectSingleNode("Messwertebloecke").ChildNodes
For Each xmlMessBlock In xmlMessBloecke
MWBbez = xmlMessBlock.SelectSingleNode("Messwerteblock").Text 'hier im Beispiel "_Version_1"
next
end sub
<Messwertebloecke Anzahl="4">
<MWB Block="1">
<Messwerteblock>_Version_1</Messwerteblock>
<Stelle Nr="1">
<NrBez>text_1</NrBez>
<Wert />
<Einheit />
<Text>0 (decimal)</Text>
</Stelle>
<Stelle Nr="2">
<NrBez>text_2</NrBez>
<Wert />
<Einheit />
<Text>1 (decimal)</Text>
</Stelle>
<Stelle Nr="3">
<NrBez>text_3</NrBez>
<Wert />
<Einheit />
<Text>2 (decimal)</Text>
</Stelle>
</MWB>
<MWB Block="2">
...
...
</MWB>
</Messwertebloecke>
Ich möchte nun den Wert von <Text> aus der Stellenbezeichnung NrBez="text_2" auslesen.
Wie lässt sich das am einfachsten realisieren?
Ich würde gerne auch alle <Stellen> unter den <MWB> einzeln durchlaufen, jedoch kann ich diese leider nicht via "ChildNode" direkt ansprechen.
Die xmlMessBlockStellen und xmlMessBlockStelle ist immer NOTHING
<code >
sub test()
Dim xmlDoc As MSXML2.DOMDocument 'XML Datei
Dim xmlMessBloecke As IXMLDOMNodeList 'XML Knoten "Messwerteblöcke"
Dim xmlMessBlock As IXMLDOMNode 'XML Unterknoten "Messwerteblock"
dim MWBbez
Dim xmlMessBlockStellen As IXMLDOMNodeList 'XML Knoten "Messwerteblockstellen"
Dim xmlMessBlockStelle As IXMLDOMNode 'XML Unterknoten "Messwerteblockstelle"
dim MWBStelleBez
Set xmlMessBloecke = xmlDoc.SelectSingleNode("Messwertebloecke").ChildNodes
For Each xmlMessBlock In xmlMessBloecke
Set xmlMessBlockStellen = xmlMessBlock.SelectSingleNode("MWB").ChildNodes
MWBbez = xmlMessBlock.SelectSingleNode("Messwerteblock").Text 'hier im Beispiel "_Version_1"
For Each xmlMessBlockStelle In xmlMessBlockStellen
MWBStelleBez = xmlMessBlockStelle.SelectSingleNode("NrBez").Text 'hier im Beispiel ""
next
next
end sub
Danke und Gruß
Michael
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 303856
Url: https://administrator.de/contentid/303856
Ausgedruckt am: 22.11.2024 um 22:11 Uhr
4 Kommentare
Neuester Kommentar
Hallo Michael.
Pfad und Name der Datei wären interessant, ebenso der Aufbau der XML Daten (nicht nur der gepostete Ausschnitt ist relevant). Ist "Messwertebloecke" der Rootknoten? Wenn nein, wie genau ist der Pfad zu "Messwertebloecke"? Warum versuchst du den Knoten "Messwertebloecke" mit "Messwerteblöcke" zu adressieren? Kann nur in die Hose gehen ...
Grüße
rubberman
Pfad und Name der Datei wären interessant, ebenso der Aufbau der XML Daten (nicht nur der gepostete Ausschnitt ist relevant). Ist "Messwertebloecke" der Rootknoten? Wenn nein, wie genau ist der Pfad zu "Messwertebloecke"? Warum versuchst du den Knoten "Messwertebloecke" mit "Messwerteblöcke" zu adressieren? Kann nur in die Hose gehen ...
Grüße
rubberman
Hallo chef1568,
Das erreichst du simplerweise direkt mit einer XPath-Query so:
Du kannst alternativ auch folgendes machen und direkt alle NrBz Knoten auslesen und ausgeben:
Brauchst du bei dieser Variante einen weiteren Knoten der selben Ebene kannst du ja über die Eigenschaft parentNode (node.parentNode) eine eben höher springen und die dort liegenden anderen Knoten auslesen.
Zur XPath-Selection-Syntax siehe: http://www.w3schools.com/xsl/xpath_syntax.asp
Grüße Uwe
Ich möchte alle "Stellen" einzeln durchlaufen und <NrBez> auf Inhalt prüfen
Wenn Inhalt gefunden: gebe die Bezeichnung aus
Wenn Inhalt nicht gefunden: prüfe next "Stelle"
Wenn Inhalt gefunden: gebe die Bezeichnung aus
Wenn Inhalt nicht gefunden: prüfe next "Stelle"
Das erreichst du simplerweise direkt mit einer XPath-Query so:
For Each node In xmlDoc.selectNodes("//Messwertebloecke/MWB/Stelle")
set nodeNrBez = node.selectSingleNode("NrBez")
If Not nodeNrBez Is Nothing Then
If nodeNrBez.text <> "" Then
MsgBox nodeNrBez.text
End If
End If
Next
For Each node In xmlDoc.selectNodes("//Messwertebloecke/MWB/Stelle/NrBez")
If node.text <> "" Then
MsgBox node.text
End If
Next
Zur XPath-Selection-Syntax siehe: http://www.w3schools.com/xsl/xpath_syntax.asp
Grüße Uwe
Wie @colinardo schon gezeigt hat, greifst du auf ein Array gleichnamiger Knoten mit selectNodes() zu.
Grüße
rubberman
Grüße
rubberman