2016-04-28 2 views
1

Unter XPath gibt es eine Möglichkeit einen Knoten auszuwählen, dessen Position der Position eines anderen Knotens von einem anderen übergeordneten Element entspricht?XPath zum Auswählen eines Knotens nach Position basierend auf der Position eines anderen Knotens

Konkret lassen Sie uns sagen, ich habe diese einfache HTML-Tabelle (auch in diesem jsFiddle):

<table> 
    <thead> 
    <tr> 
     <th>Col A</th> 
     <th>Col B</th> 
     <th>Col C</th> 
     <th>Col D</th> 
    </tr> 
    </thead> 
    <tbody> 
    <tr> 
     <td>Field A</td> 
     <td>Field B</td> 
     <td>Field C</td> 
     <td>Field D</td> 
    </tr> 
    </tbody> 
</table> 

Sagen wir, ich die zweite Spalte td auswählen möchten, dh <td>Field B</td>, aber ich möchte es ausdrücken Suche nach der Spalte, deren Header "Col B" ist. Mit anderen Worten, ich möchte wählen <td>Field B</tb>, die position()=2 hat, aber anstatt die 2 hardcoding, möchte ich es durch die Suche nach der th, deren Text ist "Col B".

Natürlich kann ich die th wählen, mit

$x("//th[text()='Col B']") 

Aber jetzt will ich extrahieren, dass th ‚s position() (das entspricht 2) und verwendet, die die td durch seine Position zu wählen.

Konzeptionell würde Ich mag so etwas wie die folgenden tun, außer es nicht gültig XPath ist:

$x("//td[position()=//th[text()='Col B'][position()]") 

Ist das irgendwie möglich?

Antwort

1

Sie können die Anzahl von th Elemente zählen, die die th deren String-Wert ist jeder gegebene Wert vorangehen, sagen wir, "Col B", und verwenden Sie diese Zählung wählen Sie die entsprechende td Element:

//td[count(//th[.='Col B']/preceding-sibling::th)+1] 
+0

Genau das, was ich brauchte. Vielen Dank! – meetamit

+1

Gern geschehen. Danke für eine so gut formulierte, interessante Frage. – kjhughes