2013-04-16 16 views
9

Ich habe die folgende XML-Holen Sie sich das nicht leere Element XPath

<?xml version = "1.0" encoding = "UTF-8"?> 
<root> 
    <group> 
    <p1></p1> 
    </group> 
    <group> 
    <p1>value1</p1> 
    </group> 
    <group> 
    <p1></p1> 
    </group> 
</root> 

ist es möglich, die zuletzt den Knoten mit dem Wert zu erhalten? In diesem Fall erhalten Sie den Wert der zweiten Gruppe/p1.

+0

Veröffentlichen Sie Ihre xslt oder xpath bitte – MikroDel

Antwort

6

Wie wäre es so etwas wie /root/group/p1[text() and not(../following-sibling::group/p1/text())]

Mit anderen Worten: die p1 Elemente erhalten, die Text und dessen Gruppe Eltern haben, werden nicht durch Gruppenknoten gefolgt, die nicht leer p1 Elemente haben.

+0

Ich tat, es gibt einen Knoten wie vorgesehen zurück. – Marcus

+0

dieser funktioniert, ich habe es hier versucht und es gibt mir, was ich will http://www.xpathtester.com/test – Rowel

34

Diese XPath sollte auch funktionieren:

//group/p1[string-length(text()) > 0] 
+2

Es funktioniert auch mit Attributen wie src // group/p1 [string-length (@src)> 0 ]. Vielen Dank! – ovejaexiste

0

Sie auch [not(node())] Selector verwenden. Beispiel: //group/p1[not(node())]

Verwandte Themen