Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   ntElement auslesen (https://www.delphipraxis.net/179478-ntelement-auslesen.html)

Garfield 10. Mär 2014 16:01

ntElement auslesen
 
Hallo, bei einem Request bekomme ich ein XML-Dokument wie folgt zurück:

Code:
<?xml version="1.0" encoding="utf-8"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
  <s:Body>
    <u:GetStatusInfoResponse xmlns:u="urn:schemas-upnp-org:service:WANIPConnection:1">
      <NewConnectionStatus>Connected</NewConnectionStatus>
      <NewLastConnectionError>ERROR_NONE</NewLastConnectionError>
      <NewUptime>33548</NewUptime>
    </u:GetStatusInfoResponse>
  </s:Body>
</s:Envelope>'
Bisher hatte ich die Datei als String übernommen, die Strings "NewConnectionStatus", "NewLastConnectionError" und "NewUptime" gesucht und die Werte extrahiert. Ich möchte dies jedoch über XML sauber auslesen.

Mit

Delphi-Quellcode:
aNode := aXMLDoc.ChildNodes['s:Envelope'].ChildNodes['s:Body'].ChildNodes['u:GetStatusInfoResponse'];


komme ich an den Knoten. Jedoch kann ich den Wert

Delphi-Quellcode:
Result.ConnectionStatus := aNode.ChildNodes['NewConnectionStatus'].Text;


nicht auslesen, da der Knoten vom Typ "ntElement" ist. Wie komme ich an den Wert "Connected".

himitsu 10. Mär 2014 16:25

AW: ntElement auslesen
 
Der erste ChildNode darin is nicht zufällig ein Text?

Garfield 10. Mär 2014 17:33

AW: ntElement auslesen
 
Entschuldigung. Quote war der falsche Tag. Code ist besser. Es kommt mir auf die drei Childes an:

Code:
      <NewConnectionStatus>Connected</NewConnectionStatus>
      <NewLastConnectionError>ERROR_NONE</NewLastConnectionError>
      <NewUptime>33548</NewUptime>
Ich dachte auch, das das Text wäre. Aber

Delphi-Quellcode:
aNode.ChildNodes['NewConnectionStatus'].IsTextElement


ist False und

Delphi-Quellcode:
aNode.ChildNodes['NewConnectionStatus'].NodeType


ist ntElement.

himitsu 10. Mär 2014 17:53

AW: ntElement auslesen
 
Delphi-Quellcode:
aNode.ChildNodes['NewConnectionStatus'].ChildNodes[0].IsTextElement
<= der erste ChildNode :zwinker:

Das ist nunmal ein <Element>, auch wenn je nach Konfiguration und/oder XMLLib der Text auch über den Elternknoten ausgelesen werden kann.

Garfield 10. Mär 2014 18:46

AW: ntElement auslesen
 
Code:
<NewConnectionStatus>Connected</NewConnectionStatus>
hat kein Child. Da gibt es "eine Exception der Klasse EListError mit der Meldung 'Listenindex überschreitet das Maximum (0)' aufgetreten". Sieht fast so aus, als müsste ich doch mit TStrings erledigen. :cry:

himitsu 10. Mär 2014 21:19

AW: ntElement auslesen
 
Hmmmm, dann muß die Lib den ntText aber aufgelöst haben und dann müsste der über .Text zugänglich sein. :gruebel:

Garfield 10. Mär 2014 21:55

AW: ntElement auslesen
 
Liste der Anhänge anzeigen (Anzahl: 2)
Ich habe die XMLIntf in den uses. Da ist der Text ein leerer String. Aber Localname und XML zeigen, dass es das richtige Child ist. Dein himiXML zeigt in der Demo den Typ Element und den Wert an. In Bild ist es aber ein anderes Beispiel. Vielleicht liegt es am IXMLNode. Das werde ich mir morgen mal ansehen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:26 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