AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein XML Delphi Wie XML Rückgabe aus post weiterverarbeiten
Thema durchsuchen
Ansicht
Themen-Optionen

Wie XML Rückgabe aus post weiterverarbeiten

Ein Thema von p.sprick · begonnen am 16. Sep 2009 · letzter Beitrag vom 17. Sep 2009
Antwort Antwort
Seite 1 von 2  1 2      
p.sprick

Registriert seit: 29. Jan 2009
20 Beiträge
 
#1

Wie XML Rückgabe aus post weiterverarbeiten

  Alt 16. Sep 2009, 10:10
Hallo Leute,
ich bekomme von von einem idhttp1.post folgendes xml zurück:
Delphi-Quellcode:
  <?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>
Ich will folgende davon werte in eine Datenbank schreiben:
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:
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;
Ausgabe also

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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.142 Beiträge
 
Delphi 12 Athens
 
#2

Re: Wie XML Rückgabe aus post weiterverarbeiten

  Alt 16. Sep 2009, 10:24
bei mir (Hier im Forum suchenhimXML) würde es so gehn und ich bin mir sicher, daß XPath da auch eine ähnliche Möglichkeit für einen Index anbietet
Zitat:
CATEGORIES/CATEGORIES_DATA[0]/ID
CATEGORIES/CATEGORIES_DATA[1]/ID
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
p.sprick

Registriert seit: 29. Jan 2009
20 Beiträge
 
#3

Re: Wie XML Rückgabe aus post weiterverarbeiten

  Alt 16. Sep 2009, 10:38
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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.142 Beiträge
 
Delphi 12 Athens
 
#4

Re: Wie XML Rückgabe aus post weiterverarbeiten

  Alt 16. Sep 2009, 10:54
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.


http://de.wikipedia.org/wiki/XPath
bei XPath scheint der Index genauso angegeben zu werden, also versuch es einfach mal so
Delphi-Quellcode:
for i := 0 to Pred(dl.length) do
begin
  xPath := Format('/CATEGORIES/CATEGORIES_DATA[%d]/ID', [i]);
  dl := selectNodes(xPath);
obwohl ich eigentlich erwartet hätte, daß dein Code auch geht
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
p.sprick

Registriert seit: 29. Jan 2009
20 Beiträge
 
#5

Re: Wie XML Rückgabe aus post weiterverarbeiten

  Alt 16. Sep 2009, 11:05
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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.142 Beiträge
 
Delphi 12 Athens
 
#6

Re: Wie XML Rückgabe aus post weiterverarbeiten

  Alt 16. Sep 2009, 11:36
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'
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
p.sprick

Registriert seit: 29. Jan 2009
20 Beiträge
 
#7

Re: Wie XML Rückgabe aus post weiterverarbeiten

  Alt 16. Sep 2009, 12:18
Hallo,
Super ich komme weiter !
Habe das jetzt so gemacht:
Delphi-Quellcode:
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;
Er gibt mir jetzt die Languadid 1+2 auch mit aus.
Da ich jetz aber auch den Name braucht und nicht noch eine Schleife will.
Kann ich nicht die Schleife so Aufbauen
Delphi-Quellcode:
  xpath := Format('/CATEGORIES/CATEGORIES_DATA[%d]/NAMES/NAMEENTRY',[i]);
              dl1:= selectNodes(xPath);
              for j:= 0 to pred(dl1.length) do begin
              ...
              end;
und innerhalb der schleefe direkt auf die atrribut zugreifen?


Gruss Paul
  Mit Zitat antworten Zitat
p.sprick

Registriert seit: 29. Jan 2009
20 Beiträge
 
#8

Re: Wie XML Rückgabe aus post weiterverarbeiten

  Alt 17. Sep 2009, 07:52
Hallo,
noch ein kleines Problem
Ich habe es jetzt so gemacht:
Delphi-Quellcode:
  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;
Die Ausgabe ist jetzt :

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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.142 Beiträge
 
Delphi 12 Athens
 
#9

Re: Wie XML Rückgabe aus post weiterverarbeiten

  Alt 17. Sep 2009, 09:16
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?
Delphi-Quellcode:
dl := selectNodes(xPath);
value := dl[i].attributes.getNamedItem(name);
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
p.sprick

Registriert seit: 29. Jan 2009
20 Beiträge
 
#10

Re: Wie XML Rückgabe aus post weiterverarbeiten

  Alt 17. Sep 2009, 10:02
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:
             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;
Gruss Paul
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:55 Uhr.
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