Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html CSS选择器或xpath,用于迭代具有特定属性的行_Html_Xpath_Css Selectors - Fatal编程技术网

Html CSS选择器或xpath,用于迭代具有特定属性的行

Html CSS选择器或xpath,用于迭代具有特定属性的行,html,xpath,css-selectors,Html,Xpath,Css Selectors,想象一下,给我一张这样的桌子: <table> <tr><td>A</td></tr> <tr><td><a href="#">B</a></td></tr> <tr><td><a href="#">C</a></td></tr> <tr><td>D<

想象一下,给我一张这样的桌子:

<table>
  <tr><td>A</td></tr>
  <tr><td><a href="#">B</a></td></tr>
  <tr><td><a href="#">C</a></td></tr>
  <tr><td>D</td></tr>
  <tr><td><a href="#">E</a></td></tr>
  <tr><td>B</td></tr>
</table>
CSS选择器 在这一点上,我很确定CSS不会起作用,但是

'table tr:nth-child(' + n + ')'
将选择第n行,但这将选择行是否具有
a
锚定。同样地

'table tr:nth-child(' + n + ') a'
仅当
n
为2、3或5时,才会选择带有
a
锚定的行

XPath 对于XPath,它匹配所有具有
a

`//table//tr//a/ancestor::tr`
但是我不知道如何选择第n场比赛。特别是,

`//table//tr//a/ancestor::tr[position() = 2]`

似乎没有选择任何内容。

如果我理解正确,您可以找到第n个
td
,它有一个
您无法使用CSS选择器1执行此操作,原因有很多:

  • ,及
XPath不正确,因为
a/concenter::tr[position()=2]
返回
a
元素的第二个
tr
祖先。也就是说,
[position()=2]
谓词连接到
祖先::
轴。此XPath将匹配以下HTML中的中级
tr

<table>
  <tr><td><table>
    <tr><td><table>
      <tr><td><a href="#"></a>
    </table>
  </table>
</table>
这与包含子体的第二个
tr
元素相匹配



1在选择器4中,可能的解决方案是
表tr:n匹配(2个:has(a))

来自@BoltClock和@StuartLC的答案都有效。但现在我知道XPath中的括号可以控制运算符优先级,一个更简单的解决方案似乎是:

(//table//tr//a)[2]

我错过什么了吗?

答对了。很好的解释。严格地说,我认为真正的答案是
(//table//tr[genderant::a])[2]//a
来挑选
a
元素。啊!这同样有效。我以前不知道可以在XPath中使用括号表示运算符优先级。这种方法感觉比使用后代更简单::我想有一点需要指出的是:。)
(/table//tr//*[a[@href]])[2]
<table>
  <tr><td><table>
    <tr><td><table>
      <tr><td><a href="#"></a>
    </table>
  </table>
</table>
(//table//tr[descendant::a])[2]
(//table//tr//a)[2]