414 Stimmen

XPath enthält(text(),'irgendeine Zeichenkette') funktioniert nicht, wenn ein Knoten mit mehr als einem Text-Unterknoten verwendet wird

Ich habe ein kleines Problem mit XPath enthält mit dom4j ...

Nehmen wir an, mein XML lautet

<Home>
    <Addr>
        <Street>ABC</Street>
        <Number>5</Number>
        <Comment>BLAH BLAH BLAH <br/><br/>ABC</Comment>
    </Addr>
</Home>

Nehmen wir an, ich möchte alle Knoten finden, die das ABC im Text des Wurzelelements enthalten...

Der XPath, den ich zu schreiben hätte, wäre also

//*[contains(text(),'ABC')]

Dies ist jedoch nicht, was dom4j zurückgibt .... ist dies ein dom4j Problem oder mein Verständnis, wie XPath funktioniert, da diese Abfrage nur die Street Element und nicht das Element Comment Element?

Das DOM macht die Comment Element ein zusammengesetztes Element mit vier Tags zwei

[Text = 'XYZ'][BR][BR][Text = 'ABC'] 

Ich würde davon ausgehen, dass die Abfrage sollte immer noch das Element zurückgeben, da es das Element finden sollte und führen Sie enthält auf es, aber es tut nicht ...

Die folgende Abfrage gibt das Element zurück, aber sie gibt weit mehr als nur das Element zurück - sie gibt auch die übergeordneten Elemente zurück, was bei diesem Problem unerwünscht ist.

//*[contains(text(),'ABC')]

Kennt jemand die XPath-Abfrage, die nur die Elemente zurückgeben würde <Street/> y <Comment/> ?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X