我知道文档中属性的部分值,但不是整个事物。有没有我可以用来表示任何价值的角色?例如,输入的标签值是“A.选择1”。我知道它说“选择1”,但不知道它是否会在“选择1”之前说“A”或“B”。以下是相关的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表达式我用来选择标签旁边的输入值为“Choice 1”,除了A在HTML的前面:
//td[label="Choice 1"]/input
我不知道HTML中的A是A,B还是C等。但我确实知道正确的输入将始终有它旁边的Choice 1文本。如果标签包含选择1,而不是等于选择1,我该怎么说呢?
答案 0 :(得分:35)
您的XPath表达式应如下所示:
//td[contains(@label, 'Choice 1')]/input
您选择标签中包含td
的所有Choice 1
元素,然后选择这些input
元素中的td
元素。
编辑:Tomalak的评论正确地暗示了一项改进,以阻止与“选择11”(或“选择12345”,......)的匹配。
答案 1 :(得分:5)
找到Ronald的解决方案,同时试图找到一种方法来测试节点是否具有非空的属性'align'或包含文本值'text-align'的属性'style'。这些是有问题的“节点”:
<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表达式有效 - 感谢Ronald的答案指出了我正确的方向:
//*[contains(@style, 'align') or @align!='']