2009-05-14 8 views
13

文書内の属性の部分的な値は知っていますが、全体的なものではありません。どのような価値を表現するために使用できる文字はありますか?たとえば、入力のラベルの値は「A.選択肢1」です。私はそれが「選択肢1」と言いますが、「選択肢1」の前に「A.」または「B.」が表示されるかどうかはわかりません。関連するHTMLは以下のとおりです。そこの入力やラベルの他の属性がありますが、それらは、ページがレンダリングされるたびに同じではありませんので、私は参照としてそれらを使用することはできません。属性のXPath部分がわかっています

<tr> 
<td><input type="checkbox" /><label>A. Choice 1</label></td> 
</tr><tr> 
    <td><input type="checkbox" /><label>B. Choice 2</label></td> 
</tr><tr> 
<td><input type="checkbox" /><label>C. Choice 3</label></td> 
</tr><tr> 
    <td><input type="checkbox" /><label>D. Choice 4</label></td> 
</tr> 

これは私が使用しているXPath式です

//td[label="Choice 1"]/input 

HTMLにおけるAがなる場合、私は知らない:AはHTMLでそれの前にあることを除いて、「選択肢1」の値をラベルに次の入力を選択しますA、B、またはCなどです。しかし、正しい入力は、常にその隣に選択肢1のテキストが表示されます。 というラベルが含まれている場合、それを選択するにはどうすればいいですかの選択1に等しいのとは対照的に、選択1?

答えて

27

あなたのXPath式は次のようになります。

//td[contains(@label, 'Choice 1')]/input 

あなたはChoice 1が含まれていると、あなたはこれらの要素td内部input要素を選択したラベルを持つすべてのtdの要素を選択します。

EDIT:Tomalakのコメントは、 'Choice 11'(または 'Choice 12345'、...)とのマッチを防ぐための改良点を正しく示しています。

+0

素晴らしい、感謝: - 正しい方向に私を指摘ロナルドの答えのおかげで

<node> <p>This is left-aligned.</p> <div align="left" >This is aligned LEFT using HTML attribute.</div> <p style="text-align: center;" >This is centered using CSS style attribute.</p> <div align="center" >This is CENTERED.</div> <p style="text-align: right;" >This is right-aligned.</p> </this> 

このXPath式が働いていた:これらは、問題の「ノード」です。それがまさに私が必要としていたものです。 – avaleske

+0

また、助けてくれてありがとう:) –

+5

いいえ、 '/ td [concat( ''、label、 '')、 'Choice 1')]/input'のようにするか、' Choice 11 '。 – Tomalak

4

ノードに属性「align」が空でないかどうか、またはテキスト値「text-align」を含む属性「style」があるかどうかをテストする方法を見つけようとしているときに、Ronaldのソリューションが見つかりました。

//*[contains(@style, 'align') or @align!=''] 
関連する問題