![]() |
OpenXML: Leeres XML-Element -> Exception
Hallo,
ich benutze für mein aktuelles Projekt OpenXML um die Datenanbindung zu realisieren. Soweit habe ich bis jetzt keine Probleme, jedoch bin ich vor kurzem auf eins gestoßen: Sobald ich ein leeres Element in der zu lesenden XML-Datei habe, wirft der Debugger mir eine Exception aus, die mich auf eine Zugriffsverletzung hinweist. Dabei ist es egal, ob das Element die Form <element></element> oder die Form <element /> besitzt. Nun fand ich Lösungen für das Problem nur für andere XML-Parser nicht jedoch für OpenXML - siehe ![]() Hier noch der Code, welchen ich zum Auslesen verwende:
Delphi-Quellcode:
Doc.GetElementsByTagName('leeres_xml_element').Item(0).ChildNodes.Item(0).NodeValue;
|
Re: OpenXML: Leeres XML-Element -> Exception
Greif nicht direkt auf die gesamte Struktur zu, sondern etappenweise. Das du eine AV bekommst ist soweit recht verständlich, oder kannst du sicherstellen, dass...
a) Doc.GetElementsByTagName('leeres_xml_element').Ite m(0) eine Instanz zurückliefert, welche nicht Nil ist? b) Doc.GetElementsByTagName('leeres_xml_element').Ite m(0).ChildNodes.Item(0) eine Instanz zurückliefert, welche nicht Nil ist? Prüfe dieses beim Zugriff und arbeite dich entsprechend in der Struktur voran. Die XML Implementatoren können schlecht alle möglichen Instanzen für alle möglichen Kombinationen erzeugen. |
Re: OpenXML: Leeres XML-Element -> Exception
Mangels aktueller OpenXML Tutorials erschließt sich mir leider nicht, wie man mit selbigen Etappenweise die Struktur eines XML-Dokuments einließt.
Für Hilfe oder hilfreiche Links wäre ich sehr dankbar! |
Re: OpenXML: Leeres XML-Element -> Exception
Zitat:
Delphi-Quellcode:
Beide Fehlermeldungen/Hinweise würden dir Fehler in der Struktur oder dem Pfad des Zugriffs aufzeigen. XML ist aber gerade auch dazu gedacht, unnötige Informationen bei Bedarf wegfallen zu lassen, daher ist es Sache von dir/deinem Code das entsprechend zu handlen. Also benötigte Knoten die fehlen entsprechend anzumeckern und bei optionalen Tags entsprechend ein Defaulthandling ausführen oder einfach ignorieren.
Var
lTagList: ???; // in Code-Insight sollte stehen, welcher Typ von GetElementsByTagName() liefert - diesen dort eintragen lNode: ???; // gleiches bei der Methode Item() von lTagList ... Begin lTagList := Doc.GetElementsByTagName('leeres_xml_element'); If Assigned(lTagList) And ( lTagList.Count > 0 ) Then Begin lNode := lTagList.Item(0); If ( lNode.ChildNodes.Count > 0 ) Then ShowMessage(lNode.ChildNodes.Item(0).NodeValue) Else ShowMessage('keine Unterknoten am Tag "leeres_xml_element" vorhanden!'); End Else ShowMessage('kein Element namens "leeres_xml_element" gefunden!'); End; |
Re: OpenXML: Leeres XML-Element -> Exception
Oh Gott.
Dank dir Muetze1. Ich hatte wohl gerade unbewusst ignoriert, dass die Länge einer Node-Liste von einem Leeren Element gleich Null ist. Danke nochmals! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:33 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