2017-12-23 18 views
1

Ich habe folgende xml:Wie kann ich Elternelemente auswählen, die ein leeres Element mit XPath enthalten?

<rootelement> 
    <parentelement> 
     <mytype>123</mytype> 
     <myvalue>abc</myvalue> 
    </parentelement> 
    <parentelement> 
     <mytype></mytype> 
     <myvalue>xyz</myvalue> 
    </parentelement> 
    <parentelement> 
     <mytype /> 
     <myvalue>qwe</myvalue> 
    </parentelement> 
    <parentelement> 
     <myvalue>asdf</myvalue> 
    </parentelement> 
</rootelement> 

Ich möchte XPath verwenden, um auszuwählen:

<parentelement> 
     <mytype></mytype> 
     <myvalue>xyz</myvalue> 
    </parentelement> 
    <parentelement> 
     <mytype /> 
     <myvalue>qwe</myvalue> 
    </parentelement> 
    <parentelement> 
     <myvalue>asdf</myvalue> 
    </parentelement> 

Wenn ich das versuche in meiner Xslt:

<xsl:template match="/rootelement/parentelement/mytype[not(text())]/.."/> 

es mit fehlschlägt:

Unerwartet zu ken in Muster, gefunden ".."

Wenn ich versuche dies:

<xsl:template match="/rootelement/parentelement/mytype[not(text())]/parent::*"/> 

es mit fehlschlägt:

Achse in Mustern Kind sein muss oder Attribut

Wie kann ich Elternelemente auswählen, die einen leeren Mytype enthalten?

Danke!

Antwort

2

Passen Sie auf das Element und setzen Sie die Bedingung in ein Prädikat, z.

<xsl:template match="/rootelement/parentelement[mytype[not(node())]]"/> 
+0

Thank you! Gibt es eine einfache Möglichkeit, es ein wenig zu erweitern und auch diejenigen Eltern auszuwählen, die mytype (nicht vorhanden) fehlt? – user1809566

+0

Sie können 'or' Ausdrücke z. '' –

+0

Tut mir leid, Martin, für meine gleichzeitige Antwort, habe deinen Post nicht gesehen, als ich mich angemeldet habe . Aber ich werde es einfach dort lassen. –

1

Sie sagen "Elternelemente, die leeren Mytype enthalten". So wählen Sie parentelement, gefolgt von einer Bedingung: Es sollte mytype enthalten, und mytype sollte leer sein. Mit dem "leeren", nehme ich an, dass Sie keinen Text oder Elemente bedeuten, so node() ist preferrable:

/rootelement/parentelement[mytype[not(node())]] 
Verwandte Themen