![]() |
Wenn ein Node kein NodeValue beinhaltet wie prüfen?
Hallo Zusammen,
ich habe ein xml-Dokument welches ich nur auslesen muss. Das Problem ist, es gibt Elemente die kein .NodeValue und auch kein .Text haben. Versuche ich mit Assigned(aNode.NodeValue) zu prüfen ob das Element vorhanden ist, bekomme ich eine exception: "Exception der Klasse EXMLDocError mit der Meldung 'Element "lr:ResultList" enthält keinen einzelnen Textknoten'
Delphi-Quellcode:
Das Element "aNode" existiert weil seine Attribute auslesen kann.
//if Assigned(aNode.NodeValue) <<< nicht kompatiblere Wert
if (aNode.NodeValue <> null) <<<obere Exception. then Memo1.Lines.Add(t + 'n: ' + aNode.NodeName + ' : ' +aNode.NodeValue) else Memo1.Lines.Add(t + 'n: ' + aNode.NodeName); Hat jemand eine Idee wie man prüfen kann ob ein NodeValue Element vorhanden ist? |
AW: Wenn ein Node kein NodeValue beinhaltet wie prüfen?
Schau mal in
Delphi-Quellcode:
. Dort wird die Bedingung getestet und bei Bedarf die Exception ausgelöst.
TXmlNode.CheckTextNode
Also sowas in der Art (nicht getestet):
Delphi-Quellcode:
if not aNode.DOMNode.HasChildNodes or ((aNode.DOMNode.childNodes.length = 0) and (DOMNode.childNodes[0].nodeType in [TEXT_NODE, CDATA_SECTION_NODE])) then begin
result := aNode.NodeValue; end; |
AW: Wenn ein Node kein NodeValue beinhaltet wie prüfen?
Interessanterweise bin ich gestern über das gleiche Problem gestolpert.
Da ich das Auslesen der NodeValues schon vorher anders gelöst hatte, war es relativ einfach zu beheben. Ich nutze dafür eine Function:
Delphi-Quellcode:
Die Prüfung auf Null hat das Problem bei mir behoben.
function GetStringValue(aNode: IXMLNode; aDefault: String = ''): String;
begin if Assigned(aNode) then begin try if aNode.NodeValue <> Null then // Zur Behebung nachträglich eingebaut begin Result := aNode.NodeValue; end else begin Result := aDefault; end; except Result := aDefault; end; end else begin Result := aDefault; end; end; Achte darauf, dass die Null-Function aus System.Variants, verwendet wird, falls in deiner Delphi-Version noch andere Definitionen von Null hinterlegt sind. Alternativ sollte auch die Function
Delphi-Quellcode:
das Problem lösen können.
VarIsNull
Falls das nicht hilft, schaue doch erstmal nach, ob der NodeName wirklich Null ist. Vielleicht liegt noch ein anderes Problem vor. |
AW: Wenn ein Node kein NodeValue beinhaltet wie prüfen?
Hallo Zusammen,
wie immer hat der Uwe die passende Lösung. :-) Peter, deine Varianten hatte ich alle schon ausprobiert. In meinem Fall funktioniert es nicht. Es funktioniert kein Assigned, VarIsNull, <> Null einfach nichts geht. so hat es jetzt funktioniert:
Delphi-Quellcode:
if not aNode.DOMNode.HasChildNodes or ((aNode.DOMNode.childNodes.length = 0) and (aNode.DOMNode.childNodes[0].nodeType in [TEXT_NODE, CDATA_SECTION_NODE]))
then Memo1.Lines.Add(t + 'n: ' + aNode.NodeName + ' : ' +aNode.NodeValue) else Memo1.Lines.Add(t + 'n: ' + aNode.NodeName); Alles perfekt, herzlichen Dank für die Hilfe und einen schönen Tag. Gruß Kostas |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06: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