2016-11-08 6 views
1

ich die folgenden Knoten haben:XPath zu bekommen Name Knoten basierend auf Existenz von Kinderknoten

<resource> 
    <DataField1> 
     <label>...</label> 
     <alert>...</alert> 
    </DataField1> 
    <DataField2> 
     <label>...</label> 
    </DataField2> 
    <DataField3> 
     <label>...</label> 
     <alert>...</alert> 
    </DataField3> 
</resource> 

und möchte den Namen des 1. und 3. Knoten zeigen, weil sie das Kind Knoten „alert“ existiert.

DataField1 
DataField3 

mit folgenden XPath kann ich die Knoten zeigen:

//resource/*[alert] 

Ergebnis:

<DataField1> 
    <label>...</label> 
    <alert>...</alert> 
</DataField1> 
<DataField3> 
    <label>...</label> 
    <alert>...</alert> 
</DataField3> 

aber das ist nicht das, was ich will.

+0

Was meinst du mit "name"? Das Etikett? Oder Datenfeld1/3? – Markus

+0

@Markus, ich meine die Bezeichnung des zweiten Knotens – klgr

Antwort

1

Sie müssen nur label hinzuzufügen:

//resource/*[alert]/label 
+0

Sorry, das war nicht das, was ich gesucht habe. Ich brauche den Namen/Label der Knoten der zweiten Ebene. Es wird ausführlich beschrieben – klgr

+0

Der XPath-Ausdruck wählt "Ressource/DataField1/Label" und "Ressource/DataField3/Label". Wenn Sie nicht danach suchen, geben Sie bitte genauer an, wie Ihr Ergebnis aussehen soll. – Markus

+0

Wenn ich local-name (// resource/* [alert]) verwende, wird DataField1 angezeigt. Aber ich möchte DataField1 und DataField3. – klgr

0

/resource/*/alert/parent::*

kehrt

Element='<DataField1> 
    <label>...</label> 
    <alert>...</alert> 
</DataField1>' 
Element='<DataField3> 
    <label>...</label> 
    <alert>...</alert> 
</DataField3>' 
+0

OP hat bereits die gleiche Ausgabe gezeigt und der Benutzer möchte keine solche Ausgabe. – Rao

Verwandte Themen