XMLDOM Objekt ignoriert Leerelemente beim Lesen der XML Datei
Fritz
- xml
Ich bearbeite eine XML Datei mit VB mittels XML DOM Object.
Das geht soweit gut, aber es gibt ein Problem, das ich bisher nicht lösen kann:
Wenn im Text eines XML Elements Leerelemente wie der Zeilenumbruch <br/> stehen, werden diese komplett ignoriert. Ich bekomme nicht den kompletten Text mit x.text geliefert, es fehlen immer die <br/>, somit klebt der Text ohne Zeilenumbruch aneinander. Offenbar sieht XMLDOM die Leerelemente als eigene Kindelemente.
Wie kann ich den kompletten Elementinhalt Inhalt inkl der leeren Kindelemente (Childelements) lesen?
Programmkode Beispiel:
set xmlDoc=CreateObject("Microsoft.XMLDOM")
xmlDoc.async="false"
xmlDoc.load("note.xml")
for each x in xmlDoc.documentElement.childNodes
temp = vbcrlf & x.nodename & : " & x.text
next
Msgbox temp
XML Beispiel:
<descr scrField="VMD" maxlng="unlimited">
Tolleranza permessa della grandezza regolante in caso di un valore imposto di 0% della potenza nominale.
<br />
Valori intermedi vengono interpolati linearmente.
</descr>
Hallo!
Du wirst nicht umhinkommen, entweder alle ChildNodes auszulesen und je nach Typ wieder in XML-Nodes umzubauen oder aber den Inhalt innerhalb einer CDATA-Section auszuliefern.
Gruß, LX
Ich habe inzwischen eine work-around Lösung gefunden:
Wenn man statt .text das .xml property verwendet, erhält man den kompletten Inhalt des Elementes, inkl aller Childknoten und Leerelemente. Allerdings hat man dann auch den Elementname inkl. des Ende-tags. Die lösche ich raus und habe damit den gewünschten Inhalt.
If z.nodename = "descr" Then ' Das Element "descr" möchte ich haben
If z.hasChildNodes Then ' Hat das Element Kinder?
txtDescr = z.xml ' Element mit Kinder, dann mit .xml lesen
' Ende-tag löschen
txtDescr = Replace(txtDescr, "</descr>", "")
' Anfangs-tag löschen
txtDescr = Right(txtDescr, Len(txtDescr) - InStr(txtDescr, ">"))
Else
txtDescr = z.text ' Element ohne Kinder, dann mit .text lesen
End If
End If