2016-04-20 8 views
0

XML ist:Wie Knoten mit spezifischen Bedingungen in den Knoten auf dem gleichen Niveau erhalten

<table class="list members"> 
    <thead> 
    <tbody> 
     <tr id="member-141568" class="odd member"> 
     <td class="name user"> 
      <td class="roles"> 
      <td class="buttons"> 
     </tr> 
     <tr id="member-141576" class="even member"> 
     <td class="name user"> 
      <td class="roles"> 
      <td class="buttons"> 
     </tr> 
     <tr id="member-141573" class="odd member"> 
     <td class="name user"> 
      <a class="user active" href="https://stackoverflow.com/users/144550">Kay Kay</a> 
     </td> 
     <td class="roles"> 
      <td class="buttons"> 
      <a class="icon icon-edit" onclick="$('#member-141573-roles').hide(); $('#member-141573-roles-form').show(); return false;; return false;" href="#">Edit</a> 
      <a class="icon icon-del" href="/memberships/141573" data-method="delete" rel="nofollow" data-remote="true">Delete</a> 
      </td> 
     </tr> 
    </tbody> 
</table> 

Die Hauptidee ist Schaltfläche Bearbeiten für bestimmte Benutzer in der Liste vor Ort zu bekommen. Also wie bekomme ich "Edit" -Element (//a[@class="icon icon-edit" and text()='Edit']) für bestimmte Benutzer (//a[@class="user active" and text()="Kay Kay"])?

Antwort

1

Q: Schaltfläche Bearbeiten für bestimmte Benutzer erhalten ich denke, es sein sollte:

//tr[.//a[@class='user active' and text()='Kay Kay']]//a[@class='icon icon-edit' and text()='Edit'] 

Finden Sie die tr mit dem Benutzer:

//tr[.//a[@class='user active' and text()='Kay Kay']] 

und die Schaltfläche Bearbeiten in diesem tr :

//a[@class='icon icon-edit' and text()='Edit'] 

Aktualisierung:

Dank har07 erste richtige Antwort Ich fügte einen Punkt (.) zu oben tr Ausdruck.

+0

Perfect !!! Es funktioniert! Ich danke dir sehr! –

1

die beiden Ausdrücke zu kombinieren, müssen Sie werde zunächst einen nächsten gemeinsamen Vorfahren finden, in diesem Fall das tr Element:

//tr[.//a[@class='user active' and text()='Kay Kay']] 

Die oben sollte tr Element finden, die bestimmte Benutzer enthält. Beachten Sie, dass die . vor / im Prädikat Ausdruck erforderlich ist, um es relativ zum aktuellen Kontext tr zu machen. Darüber hinaus, da a nicht zu tief verschachtelt ist, würde ich vorschlagen, einen vollständigen Pfad zu verwenden. Es wäre der XPath machen ein bisschen effizienter, während der Ausdruck etwa gleich prägnant zu halten:

//tr[td/a[@class='user active' and text()='Kay Kay']] 

Dann wird aus diesem tr weiter den Pfad des Zielelements mit Ihrem zweiten XPath zurückzukehren:

//a[@class="user active" and text()="Kay Kay"] 

Nachfolgend würde die gesamte XPath sein, dass ich für diese Aufgabe verwenden würde:

//tr[td/a[@class="user active" and .="Kay Kay"]]//a[@class='icon icon-edit' and .='Edit'] 
+0

Es hat geholfen! Vielen Dank! –