![]() |
bestimmte XML-Nodes auslesen
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:
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.
<?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> Ich benutze in Delphi XMLDoc und XMLIntf und msxml2_TLB
Delphi-Quellcode:
Vielen Dank schon mal.
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; Susanne |
Re: bestimmte XML-Nodes auslesen
Hallo Susanne,
vielleicht hilft dir das ein Stück auf deinem Weg:
Delphi-Quellcode:
Grüße vom marabu
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; |
Re: bestimmte XML-Nodes auslesen
Ich muss mich da mal dranhängen. Ich habe folgendes XML Dokument:
XML-Code:
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:
<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>
Delphi-Quellcode:
Nutr leider ist Nodes-length = 1, sollte aber sechs sein.
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; |
Re: bestimmte XML-Nodes auslesen
Hallo Michael,
Zitat:
XML-Code:
Grüße vom marabu
xPath := '//zeitraum[@jahr="2006"]/doktyp';
|
Re: bestimmte XML-Nodes auslesen
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
![]() |
Re: bestimmte XML-Nodes auslesen
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:55 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