2016-11-25 20 views
1

現在、正しいxpath式を見つけて、親要素/兄弟要素に特定のテキストが含まれている入力要素を選択するのに苦労しています。xpath式 - 親が特定のテキストを含む要素を選択

以下の例では、同じtr行に、特定のテキストを持つtd要素が存在する「input」要素を選択したいと考えています。

私の例パス - 戻る不一致

//input[contains(../../../td/text(),"15-935-331")] 

ソースコード

<tr> 
    <td><a href="xxx" target="_blank">xxxx, yyyyy</a></td> 
    <td>Mr</td> 
    <td></td> 
    <td> 15-935-331</td> 
    <form id="betreuerModel" action="xxxx" method="POST"> 
     <td class="tRight"> 
     <input value="Bearbeiten" id="bearbeiten" name="bearbeiten" class="submit" title="Bearbeiten" type="submit"/> 
     </td> 
    </form> 
</tr> 
<tr> 
// .. next row with same structure 
</tr> 

答えて

2

ノードセットが与えられると、それだけで非常に最初のノード上で動作するcontains機能、ノードセット。あなたの場合、それは<td><a href="xxx" target="_blank">xxxx, yyyyy</a></td>です。 述語がチェックするすべてのノードで動作するようにあなたは代わりに自分の表現をリファクタリングでき、contains機能は、単一の項目で動作:

//input[../../../td/text()[contains(., "15-935-331")]] 

これは任意のinput要素を取得します、親の親の親が含まれていますテキスト15-935-331を含むテキストノードを持つtd要素。これは../../../tdの代わりにancestor::tr[1]/tdを使用することです指定する


おそらくもっと簡単な方法。

//input[ancestor::tr[1]/td/text()[contains(.,"15-935-331")]] 

これは、祖先階層の最初のtrを取得し、それを処理します。

2

キースによって投稿ソリューションに代わるものとして、次のようなXPath式を使用することができます。これは、HTMLの実際の構造の、それはもう少し依存しなくなり

//tr[td[contains(., "15-935-331")]]/form//input 

を。指定されたテキストを含むtdを含むtrを選択し、trからform要素の下の任意の場所にinput要素を取ります。

+0

ありがとうございました – megloff

関連する問題