![]() |
Problem mit Funktion - Knoten suchen in XML
Hallo,
ich habe eine Funktion, die nicht will, wie ich will:
Delphi-Quellcode:
und wirft bei mir diese Exception:
function searchNodes(node : IXMLNode; match : widestring) : IXMLNode;
var x : integer; begin result := nil; if node.HasChildNodes then begin for x := 0 to node.ChildNodes.Count - 1 do begin if node.ChildNodes[x].Text = match then result := node.ChildNodes[x]; end; end; end; Zitat:
Viele Grüße |
Re: Problem mit Funktion - Knoten suchen in XML
Warum übergibst du den Node? Du benutzt ihn ja gar nicht!
Delphi-Quellcode:
function searchNodes(node : IXMLNode; match : widestring) : IXMLNode;
var x : integer; begin result := nil; if assigned(node) then begin if node.HasChildNodes then begin for x := 0 to node.ChildNodes.Count - 1 do begin if node.ChildNodes[x].Text = match then result := node.ChildNodes[x]; end; end; end; end; |
Re: Problem mit Funktion - Knoten suchen in XML
Hi,
Zitat:
nicht (mit assigned)#?!? Viele Grüße ... |
Re: Problem mit Funktion - Knoten suchen in XML
Hi,
ich habe mir damit geholfen den Typen auszulesen
Delphi-Quellcode:
If xmlnode.HasChildNodes Then For n:=0 To xmlnode.ChildNodes.Count-1 Do Begin newxmlnode:=xmlnode.ChildNodes.Nodes[n]; ... Case newxmlnode.NodeType Of ntText : Begin // Funktion um ein Text-Element zu bearbeiten End; ntElement: Begin End; ntProcessingInstr: Begin End; ntDocType: Begin End; ntReserved, ntAttribute, ntCData, ntEntityRef, ntEntity, ntComment, ntDocument, ntDocFragment, ntNotation : Begin End; |
Re: Problem mit Funktion - Knoten suchen in XML
Hallo,
leider bin ich noch nicht wirklich weitergekommen. Kann mir jemand sagen, ob es einen einfachen Weg gibt von einem Knoten einen Unterknoten mit dem Text "xyz" zu finden? Eigentlich möchte ich nur wissen, ob ein solcher existiert. Viele Grüße ... |
Re: Problem mit Funktion - Knoten suchen in XML
Hallo,
welche XML-Bibliothek verwendest du? |
Re: Problem mit Funktion - Knoten suchen in XML
Hi,
XMLIntf, XMLDoc -> IXMLDocument Viele Grüße ... |
Re: Problem mit Funktion - Knoten suchen in XML
MS XML, TXML, OmniXML, OpenXML, SimpleXML oder noch was ganz anderes?
|
Re: Problem mit Funktion - Knoten suchen in XML
Hi,
TXML Viele Grüße ... // Habe gerade was entdeckt: isTextElement ... mal schauen |
Re: Problem mit Funktion - Knoten suchen in XML
Hallo,
mit dieser Lib habe ich noch nicht gearbeitet, aber geh doch mal Schritt für Schritt durch alle Knoten, und lass dir den Textknoten mittels ShowMessage anzeigen. Eventuell ist das XML-Dokument nicht konform aufgebaut und wirft dadurch diesen Fehler? |
Re: Problem mit Funktion - Knoten suchen in XML
Hallo,
im Moment lese ich es ja nicht nur aus, sondern baue es auf. Ich vermute, dass da irgendwo der Fehler liegt. Im Prinzip soll es so funktionieren: Knoten erstellen, falls Unterknoten mit Text "xyz" existiert weiter, wenn nicht Unterknoten erzeugen. Viele Grüße ... |
Re: Problem mit Funktion - Knoten suchen in XML
Hallo Stefan,
Textknoten mit einem bestimmten Inhalt kannst du so suchen:
Delphi-Quellcode:
Freundliche Grüße
var
i: Integer; nl: IDOMNodeList; begin with XMLDocument.DOMDocument as IDOMNodeSelect do nl := selectNodes('//*[text() = "SuchText"]'); for i := 0 to Pred(nl.length) do with nl[i] as IDOMNodeEx do ShowMessage(XML); end; |
Re: Problem mit Funktion - Knoten suchen in XML
Hallo,
danke für eure Antworten. Habe jetzt die Lösung für mich gefunden:
Delphi-Quellcode:
@Marabu
function searchNodes(nx : IXMLNode; match : widestring) : boolean;
var x : integer; begin result := false; for x := 0 to nx.ChildNodes.Count - 1 do begin if (nx.ChildNodes[x].IsTextElement) and (nx.ChildNodes[x].NodeValue = match) then result := true; end; end; ich nehme an deine Lösung verwendet xpath und ist somit noch schneller? Muss ich mir nochmal genauer ansehen! Viele Grüße ... |
Re: Problem mit Funktion - Knoten suchen in XML
Wenn Du nach der Result-Zuweisung noch mit break aus der Schleife springst, ist Deine Variante vermutlich auch schneller. Willst Du break vermeiden, musst Du eine andere Schleife verwenden.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:49 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