![]() |
OpenXML - NodeValues auslesen funktioniert nicht
Hallo,
ich verwende folgenden Source, um NodeValues auszulesen:
Delphi-Quellcode:
In der Anzeige erscheint zwar der korrekte NodeName (z.B. "Address"), aber die NodeValue ist leer ?
uses XDom_4_1;
....... DomImplementation1:=TDomImplementation.create(self); XmlToDomParser1:=TXmlToDomParser.create(self); XmlToDomParser1.DOMImpl:=DomImplementation1; Doc := XmlToDomParser1.ParseFile(AppDataDir + '\Devices.xml', false); List:=Doc.getElementsByTagName('Device'); if Assigned(List) and (List.length>0) then for i := 0 To List.length -1 do begin SubList:=List.item(i).childNodes; for j:=0 to SubList.length-1 do begin ShowMessage(Sublist.Item(j).NodeName+': '+SubList.Item(j).NodeValue); end; end; XmlToDomParser1.Free; DomImplementation1.Free; Was mache ich falsch ? Anbei noch das XML:
XML-Code:
Danke,
<?xml version="1.0" encoding="UTF-8"?>
<XI> <Devices> <Device serial="339362"> <Address>1</Address> <Name>Gesamt</Name> <Berechnet>0</Berechnet> </Device> </Devices> </XI> Sebastian |
Re: OpenXML - NodeValues auslesen funktioniert nicht
Hallo zusammen,
ich habe es inzwischen gefunden. In DOM wird wohl *alles* als eigenes Objekt behandelt, also auch der Text. Funktionieren tut es nun so:
Delphi-Quellcode:
Wichtig sind diese Zeilen:
uses XDom_4_1;
....... DomImplementation1:=TDomImplementation.create(self); XmlToDomParser1:=TXmlToDomParser.create(self); XmlToDomParser1.DOMImpl:=DomImplementation1; Doc := XmlToDomParser1.ParseFile(AppDataDir + '\Devices.xml', false); List:=Doc.getElementsByTagName('Device'); if Assigned(List) and (List.length>0) then for i := 0 To List.length -1 do begin SubList:=List.item(i).childNodes; for j:=0 to SubList.length-1 do begin if (SubList.Item(j).HasChildNodes) then if (Sublist.Item(j).childNodes.item(0).NodeName='#text') then begin key:=lowercase(Sublist.Item(j).NodeName); value:=SubList.Item(j).childNodes.item(0).NodeValue; ShowMessage(key+': '+value); end; end; end; XmlToDomParser1.Free; DomImplementation1.Free;
Delphi-Quellcode:
Vielleicht hilfts ja jemanden.
if (SubList.Item(j).HasChildNodes) then
if (Sublist.Item(j).childNodes.item(0).NodeName='#text') then begin key:=lowercase(Sublist.Item(j).NodeName); value:=SubList.Item(j).childNodes.item(0).NodeValue; ShowMessage(key+': '+value); end; lg |
Re: OpenXML - NodeValues auslesen funktioniert nicht
Hallo Sebastian,
es ist manchmal sauberer mit Elementen zu arbeiten:
Delphi-Quellcode:
Die von dir entdeckten Textknoten sind eigentlich Enkel und keine Kinder, aber das geht bei dem Zugriff über childNodes verloren.
procedure TDemoForm.ButtonClick(Sender: TObject);
var doc: TDomDocument; nl: TDomNodeList; e: TDomElement; i: Integer; begin with OpenDialog do if Execute then begin doc := XmlToDomParser.FileToDom(FileName); nl := doc.getElementsByTagName('Device'); for i := 0 to Pred(nl.length) do begin e := nl.item(i).FindFirstChildElement; while Assigned(e) do begin ShowMessage(Format('%s: "%s"', [e.TagName, e.TextContent])); e := e.FindNextSiblingElement; end; end; doc.Free; end; end; Grüße vom marabu |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11: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