2009-05-14 2 views
13

Я знаю частичное значение атрибута в документе, но не все. Есть ли символ, который я могу использовать для представления любого значения? Например, значением метки для ввода является «A. Выбор 1». Я знаю, что это говорит «Выбор 1», но не будет ли он говорить «A.» или «B.» перед «выбором 1». Ниже приведен соответствующий 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 выражение я использую для выбора входа рядом с ярлыком со значением «выбор 1», за исключением того, что А перед ним в HTML:

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

Я не знаю, если А в HTML будет A, B или C и т. д. Но я знаю, что правильный ввод всегда будет содержать текст выбора 1 рядом с ним. Как я могу выбрать его, если метка содержит Выбор 1, в отличие от , равный Выбор 1?

ответ

27

Ваше выражение XPath должно выглядеть следующим образом:

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

Вы выбираете все td элементы, которые имеют метку, которая содержит Choice 1, а затем вы выбираете input элементы внутри этих td элементов.

EDIT: Комментарий Томалака правильно указывает на улучшение, предотвращающее матч против «Выбор 11» (или «Выбор 12345», ...).

+0

удивительным, спасибо. Это именно то, что мне нужно. – avaleske

+0

Также полезно для меня, спасибо :) –

+5

Нет, это должно выглядеть так: // td [содержит (concat ('', label, ''), 'Choice 1')]/input' или будет соответствовать 'Choice 11 '. – Tomalak

4

Обнаружено решение Рональда, пытаясь найти способ проверить, имеет ли узел либо атрибут «align», который не является пустым, либо атрибут «стиль», который содержит текстовое значение «text-align». Эти «узлы» в вопросе:

<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 работал - благодаря ответу Рональда, который указал мне в правильном направлении:

//*[contains(@style, 'align') or @align!=''] 
Смежные вопросы