c# - 如何使用 XPath 选择两个节点之间的所有元素

标签 c# c#-4.0 xpath

我如何选择第一个和第二个 h2 之间的所有内容(所有可能的节点)?它们之间可以有n个节点,可以有m个h2标签。

节点不一定要包含在 HTML 元素中,因此选择器可以将它们全部抓取。

<html>
 <h2>asdf</h2>
 <p>good stuff 1</p>
 <p>good stuff 2</p>
 <p>good <a href="#">asdf</a>stuff n...</p>
 <h2>qwer</h2>
 <p>test2</p>
 <h2>dfgh</h2>
 <p>test2</p>
</html>

我刚刚接触 XPath。请帮助我的新手问题:)

非常感谢!

最佳答案

一个选择所需元素的 XPath 表达式是:

   /*/h2[1]
      /following-sibling::p
        [count(. | /*/h2[2]/preceding-sibling::p)
        =
         count(/*/h2[2]/preceding-sibling::p)
        ]

通常,在这种情况下,可以使用 Kayessian 公式求集交集:

$ns1[count(.|$ns2) = count($ns2)]

此 XPath 表达式选择属于两者 节点集的所有节点 $ns1$ns2 .

如果要获取两个给定节点 $n1 和 $n2 之间的所有节点,这是两个节点集的交集:$n1/following-sibling::node()$n2/preceding-sibling::node() .

只需将这些表达式代入 Kayessian 公式即可得到所需的 XPath 表达式。

在 XPath 2.0 中,当然,我们会使用 <<>>运算符,类似于:

 /*/h2[1]/following-sibling::p[. << /*/h2[1]/]

关于c# - 如何使用 XPath 选择两个节点之间的所有元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9525239/

相关文章:

c# - Twilio 休息 API 错误代码 21612

c# - NHibernate 3.2 映射中的一对一映射代码

python - 获取 Selenium 中的特定元素

python - 从变量中删除值的最佳方法?创建数组,或使用正则表达式?或者用Xpath?

c# - 在 asp.net 中使用散列密码创建登录名

c# - 用于查询大文件的 Windows 文件系统 API

c# - Lambda:高效地查找、修改然后对元素进行分组

c# - Cookie less Session 在关闭 IE 后不会过期

c# - 如何使用 System.Lazy 和 Setter 来延迟初始化 POCO 实体中的列表?

html - XPath 返回由 html 标签分割的字符串连接