Bernd2k: XML parsen

Beitrag lesen

Hallo,

erst mal vielen Dank fuer die ausfuehrliche Antwort!

um XML Dokumente zu parsen benutzt man für gewöhnlich eine entsprechende Komponente, für MS/ASP/VB wäre es beispielsweise der MSXML Parser in der jeweilig zur Verfügung stehenden Version. Der hat

Okay, das hab ich und ich benutze den MSXML-Parser auch.

Ich habe eine XML-Datei die wie folgt aufgebaut ist
<buecher>
  <buch>
    <autor>AAA</autor>
    <titel>BBB</titel>
  </buch>
  <buch>
   .....
</buecher>

Ich komme einfach nicht dahinter wie ich auf die Elemte zugreifen kann. In PHP ist das so easy.

Dafür gibt es die .ChildNodes Collection von XmlNode sowie die

Okay, das verstehe ich auch. Mein Problem liegt vielleicht dabei, dass ueber <buecher> noch ein Element <bibliothek> liegt. Kann man denn den Einstiegspunkt des rootNode angeben? Denn mit
   Set rootNode = XMLDoc.documentElement
greift der auf <bibliothek> zu und nicht auf <buecher>
Ich habe mir dann etwas rekursives zusammengebaut.
Das greift dann auf die tieferliegenden Elemnte genau so zu, wie ich es will, ABER, ich bekomme vom Parser keine Rueckmeldung/ ein Flag oder aehnliches, wann denn ein 'childNode' angearbeitet ist.
Ich moechte bspw. jedes <buch> auf einer HTML-Seite ausgeben und nach jedem Buch ein Trennstrich ziehen.
Bis jetzt faellt mir nur eine Konstruktion ein mitzuzaehlen, wie oft der Parser <buch> gefunden hat und wenn die Anzahl grade ist, muss er wohl </buch> gefunden haben und ich weiss, dass ich jetzt den Trennstrich ziehen kann. Das kann doch aber nicht wirklich so gedacht sein, oder? Liefert denn der Parser nichts zurueck, dass er einen Knoten abgearbeitet hat?

Methoden Select/SelectSingleNode von XmlNode

Hm, das muss ich mir mal anschauen

Was ist unstrukturiert? Das du eine Schleife benutzt um jedes XmlNode Object in der XmlNode.ChildNodes Collection verarbeiten zu können. <buch> ist in dem Fall ein XmlNode aus XmlDoc.DocumentElement.ChildNodes. Das DocumentElement hat den Namen "buecher". Mit jeder Schleifeniteration arbeitest du also genau ein <buch> ab. Was ist daran so schwer?

Eben dass ich nicht mitbekomme, wann ein <buch> 'abgearbeitet' ist.

was sie tun sollen. Wenn du den InnerText Wert <autor> haben willst, dann solltest du auch auf diesen Node zugreifen. z.b. mit

Set rootNode = XMLDoc.documentElement
If rootNode.hasChildNodes() Then
  For Each buch in rootNode.childNodes
    autorNode = buch.SelectSingleNode("autor")
       response.write autorNode.nodeName & ": " & autorNode.Text & "<p>"
  Next
End If

Ja, das geht, wenn das nur einmal verschachtelt ist, aber ich bekomme nicht mit, wann ein <buch> fertig ist, wenn ein childNode noch mal childnodes hat. Also wie bei mir, wo ueber <buecher> noch <bibliothek> liegt.  
Mein Versuch bis jetzt  
  
Ich habe auch mal versucht, ob mir der Parser nur die Elemente rausholt die <buch> sind. Aber mit  
 liste = XMLDoc.GetElementsByTagName("buch")  
bekomme ich nur den Fehler "Wrong number of arguments or invalid property assignment: 'liste'" geliefert.  
  
  
Danke noch mal fuer deine Hilfe, evtl. habe ich ein tieferliegendes Verstaendnisproblem, da ich mir nicht vorstellen kann, dass das so schwierig sein kann, da XML ja nun wirklich ueberall genutzt wird.