Thomas J.S.: XPath: Nodes mit unterschiedlichen Namen auswählen?

Beitrag lesen

Hallo,

folgendes Problem anhand eines Beispiels:

<a>
  <b>foo</b>
  <b>bar</b>
  <c>bla</c>
  <unwanted>Böse Daten ;)</unwanted>
  <b>baz</b>
</a>

Ich habe ein MS XML 3.0 DOMDocument und möchte nun über die selectNodes-Methode an alle b's und c's in a ran. Wie geht das (mit dem MS XML Parser 3.0)?

Du hast die Methode setProperty benutzt? z.B.
xmlDoc.setProperty("SelectionLanguage", "XPath");
selection = xmlDoc.selectNodes("/a//b");
Bzw. bist du dich sicher das deine XPath-Ausdruck richtig (d.h. es trifft auf Knoten) ist?

Wichtig ist vor allem die Reihhenfolge der Elemente, so dass 2 XPath-Abfragen à la "a/b" und "a/c" nicht funktionieren. Ich könnte nun alle childNodes durchlaufen und den baseName überprüfen, aber ich bin mir sicher, dass es auch eine nette XPath-Variante gibt.

Ich versthe nicht was du erreichen möchtest und so ist es auch schwer zu sagen wie du dahin kommst.

Setze mich erst seit kurzem mit diesem Thema auseinander und wäre daher auch dankbar für Links zu XML/XPath und Konsorten, die nicht so sehr auf XSLT fokussiert sind.

Wiederum verstehe ich dich nicht.
http://aktuell.de.selfhtml.org/links/xml.htm
http://aktuell.de.selfhtml.org/links/xml_derivate.htm
http://www.vbxml.com/

Ich habe da was von der XPath-Funktion name() gelesen und dachte mir, dass vielleicht folgendes funktionieren könnte: "a/*[name() = 'b' or name() = 'c']" Aber hierbei erklärt der MS-Parser mir, dass die Funktion name() unbekannt ist (was er übrigens von jeder Funktion behauptet).

Das könnte vielleicht mit "SelectionLanguage" zusammenhängen.
Aber ein wenig mehr von deinem Code wäre für eine bessere Hilfe nicht so schlecht.

Grüße
Thomas