Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   Wert aus xml-Dokument lesen mit TxmlDocument (https://www.delphipraxis.net/161743-wert-aus-xml-dokument-lesen-mit-txmldocument.html)

lowmax_5 18. Jul 2011 17:12

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>

RWarnecke 19. Jul 2011 08:26

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:

DelphiSecurity 19. Jul 2011 08:29

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!

lowmax_5 19. Jul 2011 09:34

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

DelphiSecurity 19. Jul 2011 09:56

AW: Wert aus xml-Dokument lesen mit TxmlDocument
 
So umständlich...:glaskugel:

lowmax_5 19. Jul 2011 11:23

AW: Wert aus xml-Dokument lesen mit TxmlDocument
 
Zitat:

So umständlich...
Wie geht es denn mit dem Assistenten von TXMLDocument einfacher?
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

DelphiSecurity 19. Jul 2011 12:52

AW: Wert aus xml-Dokument lesen mit TxmlDocument
 
Schau dir mal das hier an!
"Bitte klicken"

lowmax_5 19. Jul 2011 13:54

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

DelphiSecurity 19. Jul 2011 14:08

AW: Wert aus xml-Dokument lesen mit TxmlDocument
 
OK, dann ist es nicht umständlich. Ich arbeite immer mit:

Code:
<erst>hallo</erst>
nicht mit:
Code:
<erst id=1234></erst>

himitsu 19. Jul 2011 14:24

AW: Wert aus xml-Dokument lesen mit TxmlDocument
 
via XPath könnte man es mal mit derartigen Pfaden versuchen:
Code:
Cube\Cube[time=2011-11-11]\Cube[currency=RUB]\attribute::rate

Cube\Cube\Cube[currency=RUB]\attribute::rate

Cube[currency=RUB]\attribute::rate
(1+2 für absolute Pfade und 3 für eine globale Suche)


Bei Google suchenXPath Wiki: XPath





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 10:13 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz