AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

bestimmte XML-Nodes auslesen

Ein Thema von Susanne · begonnen am 23. Jun 2006 · letzter Beitrag vom 25. Jul 2006
Antwort Antwort
Susanne

Registriert seit: 21. Mai 2004
Ort: Lage
232 Beiträge
 
Delphi 2005 Professional
 
#1

bestimmte XML-Nodes auslesen

  Alt 23. Jun 2006, 10:02
ich hab bisher noch nicht viel mit XML gemacht und scheitere im Moment ein bisschen, wäre daher sehr nett, wenn ihr mir ein wenig helfen würdet.
meine xml-Struktur:
Delphi-Quellcode:
   <?xml version="1.0" encoding="utf-8"?>
   <Info>
     <Export>
       <Documents>
         <Document ID="12345" Extension="xxx">
           <Indexe>
             <Index name="nr1">
               <Gefundene Count="1">
                 <Gefunden>hallo</Gefunden>
               </Gefundene>
             </Index>
           </Indexe>
         </Document>
         <Document ID="23456" Extension="xxx">
           <Indexe>
             <Index name="nr2">
               <Gefundene Count="0"/>
             </Index>
           </Indexe>
         </Document>
       </Documents>
       <andereNode>
         <Node Name="testnr">Test</Node>
         <Node Name="testnr2">Test2</Node>
       </andereNode>
     </Export>
   </Info>
Mein Problem besteht nun darin, dass ich an ein bestimmtes Attribut eines Knoten kommen möchte und zwar "ID= " und wenn ich dann das richtige gefunden habe (dieses kommt mehrmals vor) dann möchte ich Index Name= auslesen und wenn Value <> 0 ist, dann auch Values auslesen.

Ich benutze in Delphi XMLDoc und XMLIntf und msxml2_TLB

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  xmlDomdoc : DomDocument40;
  domNodelist : IXMLDomNodelist;
  domNode : IXMLDomNode;
  i : integer;
begin
  xmlDomDoc:= CoDomDocument40.Create;
  xmlDomDoc.load('D:\dev\Schillig\-XMLArchiver\Daten\export.xml');
  domNodelist := xmlDomDoc.documentElement.selectNodes
('//Export/Documents/Document/');
  for i := 0 to domNodelist.length - 1 do
  begin
    domNode:= domNodeList.item[i];
    ShowMessage(domNode.nodeName);

    if DomNode <> nil then
    begin

    //aber wie komme ich hier an das Attribut?
    
    end;
    domNode := DomNode.NextSibling; // zum nächsten Knoten auf der Ebene
  end;
end;
Vielen Dank schon mal.
Susanne
Susanne
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: bestimmte XML-Nodes auslesen

  Alt 23. Jun 2006, 21:59
Hallo Susanne,

vielleicht hilft dir das ein Stück auf deinem Weg:

Delphi-Quellcode:
procedure TWebForm.DemoButtonClick(Sender: TObject);
var
  i: Integer;
  doc: IXMLDOMDocument2;
  nl: IXMLDOMNodeList;
  n: IXMLDOMNode;
begin
  doc := CoDomDocument40.Create;
  doc.async := False;
  if doc.load('c:\daten\dp\info.xml') then
  begin
    nl := doc.selectNodes('//Document');
    for i := 0 to Pred(nl.length) do
    begin
      n := nl.item[i];
      n := n.attributes.getNamedItem('ID');
      ShowMessage(VarToStr(n.nodeValue));
    end;
  end;
end;
Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

Re: bestimmte XML-Nodes auslesen

  Alt 25. Jul 2006, 11:21
Ich muss mich da mal dranhängen. Ich habe folgendes XML Dokument:
XML-Code:
<importkennungen>
 <zeitraum jahr="2006">
    <doktyp kennung="11A13">
      <ziel print="true">(#DATAWERK)\AUSGHEIN</ziel>
    </doktyp>

    <doktyp kennung="11A14">
      <ziel>(#BUNG06)\AUSGNUNG</ziel>
    </doktyp>

    <doktyp kennung="11B14">
      <ziel>(#BUNG06)\EINGNUNG</ziel>
    </doktyp>

    <doktyp kennung="11B01" MapField="Vorgang" fromChar="0" Length="5" FormularFilter="WEAR" SearchFieldName="Vorgang">
      <ziel>(#BUNG06)\EINGNUNG</ziel>
    </doktyp>

    <doktyp kennung="EB" MapField="BA" fromChar="0" Length="2" FormularFilter="KOAU" SearchFieldName="Rg-Nr">
      <ziel>(#BUNG06)\EINGNUNG</ziel>
    </doktyp>

    <doktyp kennung="ZV" MapField="BA" fromChar="0" Length="2" FormularFilter="KOAU" SearchFieldName="Belegnummer">
      <ziel>(#BUNG06)\EINGNUNG</ziel>
    </doktyp>

  </zeitraum>
</importkennungen>
zeitraum kann auch 2003 oder 2004 oder so sein. Das ist nur ein Auschnitt. Ich will jetzt alle Unterknoten itterieren, die sich unterhalb eines Zeitraumes mit einem bestimmten Jahr befinden:
Delphi-Quellcode:
    s := Format('//zeitraum[@jahr="%s"]', [Year]); //Year = 2006
    Nodes := FXMLDoc.selectNodes(s);
    for i := 0 to Nodes.length - 1 do
    begin
      Node := Nodes.item[i];
      s := Node.selectSingleNode('doktyp/@kennung').nodeValue;
      DebugLog('Knoten', s);
    end;
Nutr leider ist Nodes-length = 1, sollte aber sechs sein.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: bestimmte XML-Nodes auslesen

  Alt 25. Jul 2006, 12:45
Hallo Michael,

Zitat von Luckie:
Nur leider ist Nodes-length = 1, sollte aber sechs sein.
Eins ist korrekt - wenn du Sechs willst, dann probier es mal so:

xPath := '//zeitraum[@jahr="2006"]/doktyp'; Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#5

Re: bestimmte XML-Nodes auslesen

  Alt 25. Jul 2006, 12:57
Leider besitzt keiner von euch ein Delphi 2006 (mich eingeschlossen), aber vielleicht kennt Ihr jemanden... Dort gibts jedenfalls den XML Import Wizard, der die XML Struktur ausliest, und im Gegenzug ganz nette Klassen und Interfaces anlegt, mit denen man wirklich ganz bequem mit XML hantieren kann... Meine ersten Gehversuche damit sind hier erfolgreich geschildert. Also ein Blick lohnt es auf jeden Fall.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

Re: bestimmte XML-Nodes auslesen

  Alt 25. Jul 2006, 13:40
Zitat von marabu:
xPath := '//zeitraum[@jahr="2006"]/doktyp'; Grüße vom marabu
Ja, genau das war es.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort


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 18:26 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