![]() |
Wie XML Rückgabe aus post weiterverarbeiten
Hallo Leute,
ich bekomme von von einem idhttp1.post folgendes xml zurück:
Delphi-Quellcode:
Ich will folgende davon werte in eine Datenbank schreiben:
<?xml version="1.0" encoding="iso-8859-1" ?>
- <CATEGORIES> - <CATEGORIES_DATA> <ID>8</ID> <PARENT_ID>0</PARENT_ID> - <NAMES> - <NAMEENTRY> <LANGUAGEID>1</LANGUAGEID> <NAME>Kategorie 8</NAME> </NAMEENTRY> - <NAMEENTRY> <LANGUAGEID>2</LANGUAGEID> <NAME>Kategorie 8</NAME> </NAMEENTRY> </NAMES> </CATEGORIES_DATA> - <CATEGORIES_DATA> <ID>9</ID> <PARENT_ID>0</PARENT_ID> - <NAMES> - <NAMEENTRY> <LANGUAGEID>1</LANGUAGEID> <NAME>Kategorie 9</NAME> </NAMEENTRY> - <NAMEENTRY> <LANGUAGEID>2</LANGUAGEID> <NAME>Kategorie 9</NAME> </NAMEENTRY> </NAMES> </CATEGORIES_DATA> </CATEGORIES> ID,Language,Name 8,0,Kategorie 8 8,1,Kategorie 8 .... Wenn ich die xml in einen FileStream speicher und in ein xmlDocument lade kann ich schon mal so die ID rankommen
Delphi-Quellcode:
Ausgabe also
xmlDocument1.loadfromstream(FileStream);
with XMLDocument1.DOMDocument as IDOMNodeSelect do begin xPath := '/CATEGORIES/CATEGORIES_DATA/ID'; dl := selectNodes(xPath); for i := 0 to Pred(dl.length) do begin dn := dl.item[i] as IDOMNodeEx; Memo1.Lines.add('Kategorie: '+ string(dn.Text)); end; end; Kategorie 8 Kategorie 9 Wie komme ich an die andere Daten ? Inner Schleife subnodes ? Ich wollte eigentlich mit der MSXML arbeiten aber das scheiterte schon beim xmldoc.Loadxml(filename) Fehler -1072896682 Wer kann helfen ? Gruss Paul |
Re: Wie XML Rückgabe aus post weiterverarbeiten
bei mir (
![]() Zitat:
|
Re: Wie XML Rückgabe aus post weiterverarbeiten
Hallo,
ich habe Delphi 6 und habe schon versucht himxml zu installieren! Bin aber gescheitert. Kann ich es für delphi 6 verwenden? Gruss Paul |
Re: Wie XML Rückgabe aus post weiterverarbeiten
Aktuell nicht und ich weiß noch nicht, wie weit ich es im Funktionsumfang und bei den genuzten Funktionen zurückschrauben kann ... bin grad am umbauen und wenn es gut läuft, hab ich schon aufgrund von Anfragen geplant dann auch eine "abgespeckte" Version rauszubringen.
Aber wie gesagt, XPath sollte etwas für die Angabe eines Index bieten. ![]() bei XPath scheint der Index genauso angegeben zu werden, also versuch es einfach mal so
Delphi-Quellcode:
obwohl ich eigentlich erwartet hätte, daß dein Code auch geht :gruebel:
for i := 0 to Pred(dl.length) do
begin xPath := Format('/CATEGORIES/CATEGORIES_DATA[%d]/ID', [i]); dl := selectNodes(xPath); |
Re: Wie XML Rückgabe aus post weiterverarbeiten
Hallo Himitsu,
also an die ID´s komme ich ja ran !!! Funktioniert einwandfrei mit meinem Code!!! Ich will aber noch an die dazugehörigen "Name" und "LANGUAGEID" komen wird wohl mit einer inneren Schleife gehen aber ich weiss nicht wie!! Gruss Paul |
Re: Wie XML Rückgabe aus post weiterverarbeiten
nja, daas wäre dann das gleiche
direkt '/CATEGORIES/CATEGORIES_DATA[%d]/NAMES/NAMEENTRY[%d]/LANGUAGEID' oder getrennt '/CATEGORIES/CATEGORIES_DATA[%d]' und von da 'NAMES/NAMEENTRY[%d]/LANGUAGEID' oder über deinen bisherigen Weg '/CATEGORIES/CATEGORIES_DATA' + .item[i] und von da 'NAMES/NAMEENTRY' + .item[i] dann weiter mit 'LANGUAGEID' |
Re: Wie XML Rückgabe aus post weiterverarbeiten
Hallo,
Super ich komme weiter ! Habe das jetzt so gemacht:
Delphi-Quellcode:
Er gibt mir jetzt die Languadid 1+2 auch mit aus.
with XMLDocument1.DOMDocument as IDOMNodeSelect do
begin xPath := '/CATEGORIES/CATEGORIES_DATA/ID'; dl := selectNodes(xPath); for i := 0 to Pred(dl.length) do begin dn := dl.item[i] as IDOMNodeEx; Memo1.Lines.add('Kategorie: '+ string(dn.Text); xpath := Format('/CATEGORIES/CATEGORIES_DATA[%d]/NAMES/NAMEENTRY/LANGUAGEID',[i]); dl1:= selectNodes(xPath); for j:= 0 to pred(dl1.length) do begin dn := dl1.item[j] as IDOMNodeEx; Memo1.lines.add(string(dn.Text)); end; end; end; Da ich jetz aber auch den Name braucht und nicht noch eine Schleife will. Kann ich nicht die Schleife so Aufbauen
Delphi-Quellcode:
und innerhalb der schleefe direkt auf die atrribut zugreifen?
xpath := Format('/CATEGORIES/CATEGORIES_DATA[%d]/NAMES/NAMEENTRY',[i]);
dl1:= selectNodes(xPath); for j:= 0 to pred(dl1.length) do begin ... end; Gruss Paul |
Re: Wie XML Rückgabe aus post weiterverarbeiten
Hallo,
noch ein kleines Problem Ich habe es jetzt so gemacht:
Delphi-Quellcode:
Die Ausgabe ist jetzt :
with XMLDocument1.DOMDocument as IDOMNodeSelect do
begin xPath := '/CATEGORIES/CATEGORIES_DATA/ID'; dl := selectNodes(xPath); for i := 0 to Pred(dl.length) do begin dn := dl.item[i] as IDOMNodeEx; Memo1.Lines.add('Kategorie: '+ string(dn.Text)); xpath := Format('/CATEGORIES/CATEGORIES_DATA[%d]/NAMES/NAMEENTRY',[i]); dl1:= selectNodes(xPath); for j:= 0 to pred(dl1.length) do begin dn := dl1.item[j] as IDOMNodeEx; Memo1.lines.add(string(dn.Text)); end; end; end; Kategorie: 8 1 Kategorie 8 2 Kategorie 8 Kategorie: 9 1 Kategorie 9 2 Kategorie 9 Ich möchte aber in der inneren Schleife auf die Attribute LANGUAGEID und NAME einzeln zugreifen. Geht es nicht irgendwie über dn.attributes.attributesbyname([NAME]) oder dn.attributes[1].value oder ähnlich? Wer weiss es ? Gruss Paul |
Re: Wie XML Rückgabe aus post weiterverarbeiten
also eigentlich müßte es gehn
hab mich grad mal etwas durchgewurschtelt selectNodes liefert eine IDOMNodeList IDOMNodeList.item (default) gibt dir einen IDOMNode IDOMNode bietet ein Property .attributes attributes ist eine IDOMNamedNodeMap und IDOMNamedNodeMap bietet wiederum die Funktion getNamedItem müßte also etwa so aussehn? :gruebel:
Delphi-Quellcode:
dl := selectNodes(xPath);
value := dl[i].attributes.getNamedItem(name); |
Re: Wie XML Rückgabe aus post weiterverarbeiten
Hallo ,
es geht nicht, sowohl: memo1.lines.add(dl1[j].attributes.getNamedItem('NAME').nodeValue); als auch memo1.lines.add(dn.attributes.getNamedItem('NAME') .nodeValue); kommen mit einem Zugriffsverletzung wieso ??
Delphi-Quellcode:
Gruss Paul
xpath := Format('/CATEGORIES/CATEGORIES_DATA[%d]/NAMES/NAMEENTRY',[i]);
dl1:= selectNodes(xPath); for j:= 0 to pred(dl1.length) do begin dn := dl1.item[j] as IDOMNodeEx; memo1.lines.add(dl1[j].attributes.getNamedItem('NAME').nodeValue); Memo1.lines.add(string(dn.Text)); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19: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