![]() |
Visio-XML mit Mischung aus Textknoten und ChildNodes
Moin, zusammen,
aus einer Visio-Datei habe ich eine interessante XML-Konstruktion, die ich nicht ausgelesen bekomme. Generell geht es darum, den Titel eines Shapes aus einem Visio-XML zu lesen. Dieser Titel ist meist als Textknoten leiccht über Node.Text erhältlich, weil das in XML meist so aussieht:
Code:
Allerdings hat der Knoten namens Text mitunter weitere untergeordnete Knoten. Dann funktioniert der Zugriff auf Text nicht mehr, wie ja auch in der Delphi-Dokumentation beschrieben:
<Text>
Gesuchter Text </Text>
Code:
Mein Problem ist, dass ich keinen Weg sehe, "Gesuchter Text" in diesem Fall zu finden. XMLNode.Text scheidet aus, das liefert erwartungsgemäß eine Exception (kein Textknoten), Node.ChildNodes liefert nur die beiden Subnodes... der Text selbst scheint vollkommen unzugänglich zu sein, weil er weder Attribut Child ist - und auch kein Textknoten.
<Text>
<cp IX='0'/> <pp IX='0'/> Gesuchter Text </Text> Mein aktueller Lösungsansatz ist, XMLNode.XML zu nutzen, das liefert alles inklusive den Text-Tags. Das parse ich dann notgedrungen "von Hand". Ist das wirklich der einzige Weg oder hat jemand eine bessere Idee? Beste Grüße Mark |
AW: Visio-XML mit Mischung aus Textknoten und ChildNodes
Gibt es kein Schema/DTD zum XML von Visio? Spontan hätte ich es wie folgt gemacht:
Delphi-Quellcode:
procedure justXmlThings();
const content: String = '<Text>' + sLineBreak + ' <cp IX=''0''/>' + sLineBreak + ' <pp IX=''0''/>' + sLineBreak + ' Gesuchter Text' + sLineBreak + '</Text>'; var xmlDoc: IXMLDocument; xmlNode: IXMLNode; begin xmlDoc := LoadXMLData(content); xmlNode := xmlDoc.DocumentElement; if (xmlNode.ChildNodes.Count > 0) then ShowMessage(xmlNode.ChildNodes.Last.Text); end; |
AW: Visio-XML mit Mischung aus Textknoten und ChildNodes
Wenn es wirklich der letzte Eintrag ist. Kann es vorkommen, dass der Eintrag zwischen Unterknoten steht?
|
AW: Visio-XML mit Mischung aus Textknoten und ChildNodes
Bei mir ist xmlNode.ChildNodes.Count = 3. Bei mir funktioniert es so:
Delphi-Quellcode:
Evtl. muss man noch Trim(...) verwenden o. ä.
var
xmlDoc: IXMLDocument; xmlNode: IXMLNode; idx: integer; begin xmlDoc := newXMLDocument; xmlDoc.LoadFromFile(ExtractFilePath('C:\Test.xml'); xmlNode := xmlDoc.DocumentElement.ChildNodes.Get(0); for idx := 0 to xmlNode.ChildNodes.Count -1 do begin if xmlNode.ChildNodes.Get(idx).NodeType = ntText then ShowMessage(xmlNode.ChildNodes.Get(idx).Text); end; end; |
AW: Visio-XML mit Mischung aus Textknoten und ChildNodes
del
|
AW: Visio-XML mit Mischung aus Textknoten und ChildNodes
Auf jeden Fall scheint mir das kein Fehler von Visio, sondern "as designed" zu sein:
Zitat:
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:09 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz