XPath, частичный атрибут, известный
Я знаю частичное значение атрибута в документе, но не все. Есть ли символ, который я могу использовать для представления любого значения? Например, значением метки для ввода является "A. Выбор 1". Я знаю, что это говорит "Выбор 1", но не будет ли он говорить "A." или "B." перед "выбором 1". Ниже приведен соответствующий HTML. Существуют и другие атрибуты для ввода и метки, но они не одинаковы при каждой странице, поэтому я не могу использовать их в качестве ссылок:
<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", за исключением того, что A находится перед ним в HTML:
//td[label="Choice 1"]/input
Я не знаю, будет ли A в HTML быть A, B или C и т.д. Но я знаю, что правильный ввод всегда будет содержать текст Choice 1 рядом с ним. Как я могу сказать, чтобы выбрать его, если метка содержит выбор 1, а не равна выбору 1?
Ответы
Ответ 1
Ваше выражение XPath должно выглядеть следующим образом:
//td[contains(@label, 'Choice 1')]/input
Вы выбираете все элементы td
, у которых есть метка, содержащая Choice 1
, и затем вы выбираете элементы input
внутри этих элементов td
.
EDIT: комментарий Томалака правильно указывает на улучшение, чтобы предотвратить совпадение с "выбором 11" (или "Выбор 12345",...).
Ответ 2
Найденное решение Ronald, пытаясь найти способ проверить, имеет ли node атрибут 'align', который не является пустым, или атрибут 'style', который содержит текстовое значение '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!='']