已知XPath部分属性

ava*_*ske 17 xpath string-matching

我知道文档中属性的部分值,但不是整个事物.有没有我可以用来表示任何价值的角色?例如,输入的标签值是"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>
Run Code Online (Sandbox Code Playgroud)

这是我用来选择标签旁边的输入的值为"选择1" 的XPath表达式,除了A在HTML前面的前面:

//td[label="Choice 1"]/input
Run Code Online (Sandbox Code Playgroud)

我不知道HTML中的A是A还是A,等等.但是我确实知道正确的输入总是会有旁边的Choice 1文本.如果标签包含选项 1,如何选择它,而不是等于选择1?

Ron*_*erg 36

您的XPath表达式应如下所示:

//td[contains(@label, 'Choice 1')]/input
Run Code Online (Sandbox Code Playgroud)

您选择td具有包含标签的所有元素,Choice 1然后选择这些input元素内的td元素.

编辑:Tomalak的评论正确地暗示了一个改进,以防止匹配'选择11'(或'选择12345',...).

  • 不,它应该看起来像`// td [contains(concat('',label,''),'Choice 1')]/input`或者它将匹配`Choice 11`. (5认同)
  • 就像对其他人一样的绊脚石:你必须使用@label,因为你指的是一个属性 (2认同)

eon*_*eon 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>
Run Code Online (Sandbox Code Playgroud)

这个xpath表达式起作用了 - 感谢Ronald的答案指出了我正确的方向:

//*[contains(@style, 'align') or @align!='']
Run Code Online (Sandbox Code Playgroud)