2010-12-28 6 views
1

Dies sind die Daten:XPath Problem mit dem Element Überspringen/Verbindungs ​​Streichhölzer

<p> 
<span class="z">XXX</span><br/> 
123456<br/> 
78910</p> 

Es gibt auch Leerzeichen und Zeilenumbrüche in der ganzen Ort. Ich brauche nur '<br/>123456<br/>78910' überspringt das Span-Element. Wenn ich diesen xpath: '// p/text()' starte ich 3 Übereinstimmungen: Die erste - eine Reihe von Leerzeichen und Zeilenumbrüche, die zweite mit 123456 und die dritte mit 78910.
Gibt es einen anderen Weg das Span-Element überspringen? Ist es irgendwie möglich, den Spielen beizutreten?

+0

Gute Frage, +1. Siehe meine Antwort für einen XPath-Ausdruck, der genau die gewünschten Knoten auswählt. :) –

+1

Was meinst du mit "den Spielen beitreten"? –

Antwort

1

Es sieht aus wie Sie jeden Knoten nach dem span Element auszuwählen versuchen:

/p/span/following-sibling::node() 

Wenn Sie die Textknoten Kinder ohne den weißen Raum nur Textknoten wollen:

/p/text()[normalize-space()] 
+0

/p/span/following-gleichgeordnete :: node() [normalize-space()] und/p/text() [normalize-space()] gab 2 Übereinstimmungen zurück, es gibt jetzt keine Übereinstimmung mit nur Leerzeichen, aber ich müssen diese beiden Spiele beitreten – Desecho

1

Verwenden:

/p/node()[not(self::span) and (not(self::text[not(normalize-space())]))] 

Dies wählt alle Knoten aus, die untergeordnete Elemente des obersten Elements p sind, und wenn sie Textknoten sind, sind sie nicht nur Leerzeichen.

+0

Es gibt mir 5 Übereinstimmungen - 3 mit nur Leerzeichen und zwei mit Text, aber ich muss ihnen in 1 Übereinstimmung beitreten. Ist das möglich? – Desecho

+1

@Desecho: Ein XPath-Ausdruck wählt * Knoten * aus - er kann keinen einzigen Knoten erstellen, da XPath eine Abfragesprache ist und das XML-Dokument nicht ändert. –