![]() |
Wert aus xml-Dokument lesen mit TxmlDocument
Hallo,
ich möchte im nachfolgenden XML-Dokument auf den Wert 'rate' für den Eintrag 'currency="RUB"' zugreifen mit der TXMLDocument-Komponente. Dieses funktioniert nicht. Kann es mit der Verschachtelung des XML-Dokumentes zu tun haben, da ein Lesen von Werten bei anderen/einfacheren xml-Dokumenten möglich ist. Warum geht es bei diesem xml-Dokuemnt nicht? Ich bin für jeden Tipp dankbar! lowmax
Code:
<?xml version="1.0" encoding="UTF-8"?>
<gesmes:Envelope xmlns:gesmes="http://www.xyz.de" xmlns="http://www.xyz.de/ref"> <gesmes:subject>rates</gesmes:subject> <gesmes:Sender> <gesmes:name>name</gesmes:name> </gesmes:Sender> <Cube> <Cube time="2011-11-11"> <Cube currency="RON" rate="4.2995"/> <Cube currency="SEK" rate="9.2705"/> <Cube currency="CHF" rate="1.3326"/> <Cube currency="NOK" rate="8.1275"/> <Cube currency="HRK" rate="7.4150"/> <Cube currency="RUB" rate="41.6510"/> <Cube currency="TRY" rate="1.9660"/> <Cube currency="AUD" rate="1.3595"/> <Cube currency="THB" rate="40.036"/> <Cube currency="ZAR" rate="9.3897"/> </Cube> </Cube> </gesmes:Envelope> |
AW: Wert aus xml-Dokument lesen mit TxmlDocument
Prinzipell sollte es möglich sein, den von Dir gewünschten Wert auszulesen. Wie hast Du es denn bis jetzt versucht. Zeige mal den Sourceode Abschnitt wie Du versuchst den Wert auszulesen. So wird es schwierig, Dir zu helfen. :glaskugel:
|
AW: Wert aus xml-Dokument lesen mit TxmlDocument
Einfachz den Assistenten von TXMLDocument nehmen und deine XMLDatei einlesen lassen und du hast ne Funktion wie: Get_Irgendwas und Set_Irgendwas!
|
AW: Wert aus xml-Dokument lesen mit TxmlDocument
Hallo,
ich bin schon einen Schritt weiter gekommen. Das Problem ist aber einen bestimmte 'rate' für einen gegebenen 'currency'-Wert zu ermitteln. Gibt es einen Weg direkt auf einen 'currency-Wert' zu gehen? d.h. diesen zu suchen? Hier der Code:
Code:
var
Doc: TXMLDocument; Stammknoten:IXMLNode; begin Doc := TXMLDocument.Create(Self); Doc.LoadFromFile(ExtractFilePath(Application.exename) + '\test.xml'); Doc.Active := true; //kann beim Auslesen wegfallen Stammknoten:=Doc.DocumentElement; if Stammknoten =nil then begin ShowMessage('Stammknoten ist Nil! Abbruch!'); exit; end; ShowMessage(stammknoten.ChildNodes.Nodes[2].ChildNodes.Nodes[0].ChildNodes.Nodes[0].AttributeNodes.Nodes[0].NodeName); //Currency ShowMessage(stammknoten.ChildNodes.Nodes[2].ChildNodes.Nodes[0].ChildNodes.Nodes[0].AttributeNodes.Nodes[0].NodeValue); //Currency=USD ShowMessage(stammknoten.ChildNodes.Nodes[2].ChildNodes.Nodes[0].ChildNodes.Nodes[0].AttributeNodes.Nodes[1].NodeValue); //Rate-Wert!!!! Mit dem Assistenten von TXMLDocument wie von 'DelphiSecurity' vorgeschlagen komme ich nicht recht weiter, wobei dieses vermutlich die schönste Lösung darstellt. Folgender Code erzeugt beim Zugriff auf den Wert immer eine AV. Irgendetwas mache ich hier grundsätzlich falsch:
Code:
var
Env:IXMLEnvelopeType; ICubeType: IXMLCubeType; ICubeType2: IXMLCubeType2; begin XMLDocument1.LoadFromFile(ExtractFilePath(Application.exename) + '\test.xml'); XMLDocument1.Active:=TRUE; ICubeType2.Currency:='RUB'; //Bei Zugriff=Crash |
AW: Wert aus xml-Dokument lesen mit TxmlDocument
So umständlich...:glaskugel:
|
AW: Wert aus xml-Dokument lesen mit TxmlDocument
Zitat:
Die Unit wird ja korrekt aufgebaut, nur der Zugriff auf die Daten verursacht immer eine AV. Irgentwie müssen die Objekte TXMLDocument, IXMLEnvelopeType, IXMLCubeType und IXMLCubeType2 in Relation gebracht werden damit dort Daten dort enthalten sind. Für einen Tipp bin ich dankbar! lowmax |
AW: Wert aus xml-Dokument lesen mit TxmlDocument
|
AW: Wert aus xml-Dokument lesen mit TxmlDocument
Das hatte ich mir auch schon angesehen, aber es auf meine xml-Datei nicht übertragbar.
Subject lässt sich noch abfragen, aber bei 'time', 'Currency' und 'rate' gibt es einen Fehler.
Code:
var
IEnvelope: IXMLEnvelopeType; begin XMLDocument1.LoadFromFile(ExtractFilePath(Application.exename) + '\test.xml'); IEnvelope:=GetEnvelope(XMLDocument1); ShowMessage(IEnvelope.Subject); //ok ShowMessage(IEnvelope.Cube.Time); //Fehler ShowMessage(IEnvelope.Cube.Cube[0].Currency); //Fehler ShowMessage(IEnvelope.Cube.Cube[0].Rate); //Fehler |
AW: Wert aus xml-Dokument lesen mit TxmlDocument
OK, dann ist es nicht umständlich. Ich arbeite immer mit:
Code:
nicht mit:
<erst>hallo</erst>
Code:
<erst id=1234></erst>
|
AW: Wert aus xml-Dokument lesen mit TxmlDocument
via XPath könnte man es mal mit derartigen Pfaden versuchen:
Code:
(1+2 für absolute Pfade und 3 für eine globale Suche)
Cube\Cube[time=2011-11-11]\Cube[currency=RUB]\attribute::rate
Cube\Cube\Cube[currency=RUB]\attribute::rate Cube[currency=RUB]\attribute::rate ![]() ![]() So könnte man es dann ohne "\attribute::rate" auslesen
XML-Code:
<Cube time="2011-11-11">
<Cube currency="RON">4.2995</Cube> <Cube currency="SEK">9.2705</Cube> ... </Cube> |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:54 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 by Thomas Breitkreuz