2016-04-28 19 views
1

XPathを使用すると、の位置が別の親の別のノードの位置と等しくなるノードを選択するXPath別のノードの位置に基づいてノードを位置別に選択する

具体的には、のは、私は(このjsFiddleでも利用可能)この単純なHTMLテーブルを持っているとしましょう:

<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> 

はすなわち<td>Field B</td>、のは、私は2列目のtdを選択したいとしましょう、私はでそれを表現したいですヘッダーが"Col B"の列を探します。つまり、position()=2<td>Field B</tb>を選択したいのですが、2をハードコーディングするのではなく、"Col B"thを探して欲しいと思います。もちろん

私は

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

を使用して、thことを選択することができます。しかし、今、私は(2に等しい)ことthposition()を抽出し、その位置によってtdを選択するためにそれを使用したいと思います。

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

何とかこれが可能である:それは、有効なXPathはありません除い

概念的に、私は、次のような何かをしたいと思いますか?

答えて

1

あなたは、文字列値任意の値であり、たとえば、"Col B"thの前th要素の数をカウントし、対応するtd要素を選択すること、カウントを使用することができます。

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

私がまさに必要と。ありがとう! – meetamit

+1

ようこそ。そのような整形された興味深い質問に感謝します。 – kjhughes

関連する問題