仅根据下一个兄弟姐妹获取标签。 xpath

get tags based on the next following-sibling only. xpath

我有这样的 HTML,我只想获取那些 <p> 具有下一个同级 <ul> 的标签。

<div>
    <p>1</p>
    <p>2</p>
    <ul>...</ul>
    <p>3</p>
    <ul>...</ul>
</div>

在上面的例子中,我只希望 XPath 到 return 第二个和第三个 <p> 标记。不是第一个。我试过使用 following-sibling 但没有成功。

此 xpath 将获得 pul 直系兄弟
//p[./following-sibling::*[position()=1][name()="ul"]]

//p[./following-sibling::*[position()=1 and name()="ul"]]

正在命令行测试

xmllint --html --recover --xpath '//p[./following-sibling::*[position()=1][name()="ul"]]' test.html 

结果

<p>2</p><p>3</p>

The name function returns a string representing the QName of the first node in a given node-set. https://developer.mozilla.org/en-US/docs/Web/XPath/Functions/name

根据上述,position()=1 and name()="ul"可能是多余的,name()="ul"就足够了。