AGB  ·  Datenschutz  ·  Impressum  







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

HILFE!!! MSXML 4.0

Ein Thema von wk_one · begonnen am 14. Jul 2003 · letzter Beitrag vom 15. Jul 2003
Antwort Antwort
wk_one

Registriert seit: 19. Mai 2003
26 Beiträge
 
Delphi 7 Professional
 
#1

HILFE!!! MSXML 4.0

  Alt 14. Jul 2003, 13:48
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:
<?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>
ich möchte nun auf die Attribute der Nodes <MODULE>,<LESSON> und <TOPIC> zugreifen.

Auf die Attribute der ersten Node komme ich so:
Delphi-Quellcode:
var
  xmlDoc : IXMLDOMDocument2;
...
...
...
Stringvariable := xmlDoc.documentElement.getAttribute('name');
das geht ja leider nicht mehr.
Stringvariable := xmlDoc.documentElement.childNodes[i].getAttribute('name');
Kann mir jemand helfen?
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#2

Re: HILFE!!! MSXML 4.0

  Alt 14. Jul 2003, 14:09
Delphi-Quellcode:
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]));
nl1 und nl2 sind vom Typ IXMLDOMNodeList.
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#3

Re: HILFE!!! MSXML 4.0

  Alt 14. Jul 2003, 14:14
Noch genialer
Delphi-Quellcode:
nl1 := xmldoc.selectNodes('MODULE/LESSON[@name="Lektion1"]/TOPIC/@name');
nl2 := xmldoc.selectNodes('MODULE/LESSON[@name="Lektion1"]/TOPIC/@href');
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.
  Mit Zitat antworten Zitat
wk_one

Registriert seit: 19. Mai 2003
26 Beiträge
 
Delphi 7 Professional
 
#4

Re: HILFE!!! MSXML 4.0

  Alt 14. Jul 2003, 15:47
Danke .

Ich hab nach irgendwelchen Methoden gesucht über die man gehen kann.

Der Parameter in der Methode selectNodes() ist wohl sowas wie ein Abfragestring. Gibt es irgendwo eine Beschreibung wie dieser auszusehen hat?

Das Ergebnis ist ein Nodelist Objekt.
Wie kann ich dann den Wert des Attributs "name" als String erhalten?
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#5

Re: HILFE!!! MSXML 4.0

  Alt 14. Jul 2003, 17:27
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:
ShowMessage(Format('%s = %s',
  [nl1.item[i].Get_nodeValue,nl2.item[i].Get_nodeValue]));
(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" - direkt auf das Attribut zugegriffen hast:
Code:
MODULE/LESSON/TOPIC[b]/@name[/b]
Oder meinst du was anderes?


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).
  Mit Zitat antworten Zitat
wk_one

Registriert seit: 19. Mai 2003
26 Beiträge
 
Delphi 7 Professional
 
#6

Re: HILFE!!! MSXML 4.0

  Alt 15. Jul 2003, 09:57
nein, war schon genau richtig.
Super , hat mir echt ein Stück weitergeholfen.
die einzige Änderung die ich vornehmen musste war anstatt
nl1.item[i].Get_nodeValue nl1.item[i].nodeValue sonst hat alles bestens funktioniert.

Viiiiiieeeelen Dank.
  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 11:10 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