![]() |
HILFE!!! MSXML 4.0
Hi ich möchte eine XML-Datei auslesen. Dazu verwende ich MSXML4.0.
Wie kann ich auf die Attribute der ChildNodes zugreifen? Die Datei die ich auslesen möchte sieht in etwa so aus:
Delphi-Quellcode:
ich möchte nun auf die Attribute der Nodes <MODULE>,<LESSON> und <TOPIC> zugreifen.
<?xml version="1.0"?>
<MODULE name="Module1" version="1.0"> <LESSON name="Lektion1" beschreibung="bla bla"> <TOPIC name="Uebung1" href="c:/irgendwas/"/> <TOPIC name="Uebung2" href="c:/irgendwas/"/> <TOPIC name="Uebung3" href="c:/irgendwas/"/> <TOPIC name="Uebung4" href="c:/irgendwas/"/> </LESSON> <LESSON name="Lektion2" beschreibung="bla bla"> <TOPIC name="Uebung1" href="c:/irgendwas/"/> <TOPIC name="Uebung2b" href="c:/irgendwas/"/> <TOPIC name="Uebung3b" href="c:/irgendwas/"/> <TOPIC name="Uebung4b" href="c:/irgendwas/"/> </LESSON> </MODULE> Auf die Attribute der ersten Node komme ich so:
Delphi-Quellcode:
das geht ja leider nicht mehr.
var
xmlDoc : IXMLDOMDocument2; ... ... ... Stringvariable := xmlDoc.documentElement.getAttribute('name');
Delphi-Quellcode:
Stringvariable := xmlDoc.documentElement.childNodes[i].getAttribute('name');
Kann mir jemand helfen? |
Re: HILFE!!! MSXML 4.0
Delphi-Quellcode:
nl1 und nl2 sind vom Typ IXMLDOMNodeList.
nl1 := xmldoc.selectNodes('MODULE/LESSON/TOPIC/@name');
nl2 := xmldoc.selectNodes('MODULE/LESSON/TOPIC/@href'); if(nl1.length > 0) and (nl2.length > 0) and (nl1.length = nl2.length) then for i := 0 to nl1.length - 1 do ShowMessage(Format('%s = %s', [nl1.item[i].Get_nodeValue,nl2.item[i].Get_nodeValue])); |
Re: HILFE!!! MSXML 4.0
Noch genialer :wink:
Delphi-Quellcode:
Damit greifst du gezielt nur auf den LESSON-Knoten zu, dessen name-Attribut "Lektion1" ist. Auf die gleiche Weise kannst du dann auch den anderen einlesen.
nl1 := xmldoc.selectNodes('MODULE/LESSON[@name="Lektion1"]/TOPIC/@name');
nl2 := xmldoc.selectNodes('MODULE/LESSON[@name="Lektion1"]/TOPIC/@href'); |
Re: HILFE!!! MSXML 4.0
Danke :D .
Ich hab nach irgendwelchen Methoden gesucht über die man gehen kann. Der Parameter in der Methode
Delphi-Quellcode:
ist wohl sowas wie ein Abfragestring. Gibt es irgendwo eine Beschreibung wie dieser auszusehen hat?
selectNodes()
Das Ergebnis ist ein Nodelist Objekt. Wie kann ich dann den Wert des Attributs "name" als String erhalten? |
Re: HILFE!!! MSXML 4.0
Wenn du das XML-4-SDK von Microsoft installiert hast, dann müsste eine Hilfedatei dabei sein. Ansonsten wirst du auch im PSDK unter dem Eintrag "Data Services" fündig. Ich habe leider den genauen Link (bzw. die genaue Hilfeseite) nicht im Kopf, aber da standen irgendwo ein paar Beispiele drin.
Ansonsten verstehe ich deine Frage nicht so ganz. Wenn du meinen Beispielcode ausprobiert hast, dann siehst du doch den Inhalt der jeweiligen name-Attribute:
Delphi-Quellcode:
(nl.item[i].Get_nodeValue). "Get_nodeValue" liefert in diesem Fall den Wert von "name", weil du oben -mit dem von dir so genannten "Abfragestring" :wink:- direkt auf das Attribut zugegriffen hast:
ShowMessage(Format('%s = %s',
[nl1.item[i].Get_nodeValue,nl2.item[i].Get_nodeValue]));
Code:
Oder meinst du was anderes?
MODULE/LESSON/TOPIC[b]/@name[/b]
Nachtrag: Du findest ein paar Hinweise und Beispiele in der schon erwähnten XML-Hilfedatei bzw. im PSDK unter "Data Services -> MSXML 4.0 SDK -> XPath's Developers Guide" (bzw. XPath Reference). |
Re: HILFE!!! MSXML 4.0
nein, war schon genau richtig.
Super :hello: , hat mir echt ein Stück weitergeholfen. die einzige Änderung die ich vornehmen musste war anstatt
Delphi-Quellcode:
nl1.item[i].Get_nodeValue
Delphi-Quellcode:
sonst hat alles bestens funktioniert.
nl1.item[i].nodeValue
:lol: Viiiiiieeeelen Dank. :D |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:43 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