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
如何使用xpath选择具有2 X 2种结构的元素?_Xpath - Fatal编程技术网

如何使用xpath选择具有2 X 2种结构的元素?

如何使用xpath选择具有2 X 2种结构的元素?,xpath,Xpath,这就是Confluence中出色的HTML表的外观: <tr> <td> key1 </td> <td> key2 </td> <td> value1 </td> <td> value2 </td> </tr> 这不管用。它什么也抓不到 附言:我完全没有花半天的时间去抓不同的排!真正的问题不止这些,但我已经解决了下半场。行选择不起作用。请

这就是Confluence中出色的HTML表的外观:

<tr>
  <td> key1
  </td>

  <td> key2
  </td>

  <td> value1
  </td>

  <td> value2
  </td>
</tr>
这不管用。它什么也抓不到

附言:我完全没有花半天的时间去抓不同的排!真正的问题不止这些,但我已经解决了下半场。行选择不起作用。

请尝试下面的XPath以按两个单元格的值匹配行:


我解决了这个问题!天哪,真不敢相信我花了几个小时才解决了。实际上,这是一个非常简单的解决方案!:)


这将根据逻辑表达式{(td=key1或td/span=key1)&(td=key2或td/span=key2))

选择行。每个键可以在td中,也可以在td/span中。我尝试了您的表达式,不幸的是,它不起作用。请注意,逻辑表达式如下:(td或span)[key1]和(td或span)[key2]。如果您可以尝试一下,那就太好了,因为还没有其他人回复过它。@Mugen,只有当提供的HTML与真实的HTML不同时,这可能不起作用,所以下次请提供更真实的源代码示例您提供的表达式看起来不对称w.r.t.key1和key2。但是,在源代码中dekey1和key2完全对称。也许我的问题不清楚。请让我重新表述一下。每个单元格可以有一个“td”标记或一个“td/span”标记。这是随机的。xpath必须考虑这两种情况。这适用于key1和key2。如果没有意义,请告诉我。@Mugen
normalize space(td)
表示表单元格的字符串表示形式(忽略前导/尾随空格)。它不依赖于单元格本身的innerHTML,因此它涵盖了这两种情况,并且与来自question@Mugen,可以是一个很好的助手。对于更高级的用法,您还可以使用测试人员快速检查XPath
<td> text
</td>
<td>
  <span>
    text
  </span>
</td>
(//tr[descendant::td[text()='key1' or descendant::span[text()='key1'] ] and descendant::td[text()='key2' or descendant::span[text()='key2'] ]])
//tr[normalize-space(td)="key1" and normalize-space(td[2])="key2"]
//*[text() = 'key1']/ancestor::tr[descendant::*[text() = 'key2']]