xpath - 我如何制定此 XPath 表达式来选择 sibling ?

标签 xpath

如何为以下 HTML 制定 XPath 表达式以获取 a 节点(value A)之后的第一个输入节点的属性值:

<a href="http://www.link.com">link</a>
<input value="value A" />
<input value="value B" />

我试过:

//input[(preceding-sibling::a[1])]/@value

但是当我只想要 a 节点是最近的前一个兄弟节点的属性时,这会获取两个输入节点的值属性。

最佳答案

您在错误的节点上使用了 [1] 谓词。您需要第一个具有 preciding-sibling::a 的输入,而不是给定级别的第一个 a 元素之后的所有输入。

这应该会产生正确的结果: //a/following-sibling::input[1]/@value

这意味着:对于在文档中的任何级别找到的每个元素 a,选择跟随它的第一个 input 元素,同时是它的兄弟元素。然后读取它的 value 属性。

对于这个输入:

<xml>
  <p>
    <input value="value A" />
    <a href="http://www.link.com">link</a>
    <input value="value B" />
    <input value="value C" />
  </p>
  <p> 
    <a href="http://www.link.com">link</a>
    <input value="value D" />
    <input value="value E" />
    <a href="http://www.link.com">link</a>
    <input value="value F" />
  </p>
</xml>

它返回:

  • B值
  • 值(value)D
  • 值(value)F

编辑

只要 a 和它后面的第一个 input 之间没有元素,这就可以工作。

例如,输入如下:

    <a href="http://www.link.com">link</a>
    <strong>OMG NOEZ!</strong>
    <input value="value A" />

值 A 仍然被选中

如果没问题,就保留上面的表达式。如果不是,则修改为过滤其他元素:

//a/following-sibling::*[1][self::input]/@value

这会选择 a 的第一个后续同级标签,无论标签是什么,只有在选择标签后才会检查实际标签。这样就不会选择在同一级别更远的输入

关于xpath - 我如何制定此 XPath 表达式来选择 sibling ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12126120/

相关文章:

c# - HtmlAgilityPack NextSibling.InnerText 值为空

xslt - 如何获取当前节点的父节点名称?

asp.net - 使用 ASP.Net 使用模板和 XPath 生成 WordML 报告

python - 如何使用selenium在python的特定文本后定位输入元素

java - 在java中比较日期与Xpath

php - 来自 $_GET 的数字未使用 php 读入 simplexml xpath 查询

python - 使用 2 级 XML 查找节点并添加字符串

python - Scrapy:为每个start_url动态生成规则

xml - 选择两个节点之间的所有 sibling (不包括 sibling )

xpath - 如何使用XPath JCR查询访问jcr:root