使用Xpath

时间:2019-03-28 17:12:45

标签: c# html xpath

我刚刚开始在C#中使用HtmlAgilityPack,并且必须使用Xpath(对此我一无所知)。 我需要获取两个<h2>之间的所有p,我知道第一个<h2>中的文本,但是另一个是动态的,我不知道其中包含什么。

<div>
     <h2><span>Location</span></h2>
     <p>Hi</p>
     <p>It's ok.</p>
     <p>Bye</p>
     <h2><span>{Dynamic text}</span></h2>
     <p>I do not know.</p>
     <h2><span>Summary</span></h2>
     <p>The end.</p>
</div>

如何获取<p>和下一个<h2> > span['Location']之间的所有<h2>(同样,我不知道其中包含什么)。

我测试过:

//p[preceding-sibling::h2[span='Location'] and following-sibling::h2]

//p[count(preceding-sibling::h2[span='Location'])=1]

两个测试的结果相同:全部<p>

谢谢!

1 个答案:

答案 0 :(得分:1)

这是一种查看方式:两个标记之间的含义与第一个标记之后的标记与第二个标记之前的标记之间的交集相同。对于XPath 1.0中的交集,我们使用Kaysian方法。就您而言

/div/h2[span='Location']/following-sibling::h2[1]/preceding-sibling::*[
   count(.|/div/h2[span='Location']/following-sibling::*)
   = count(/div/h2[span='Location']/following-sibling::*)
]