仅根据下一个兄弟姐妹获取标签。 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 将获得 p
和 ul
直系兄弟
//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"
就足够了。
我有这样的 HTML,我只想获取那些 <p>
具有下一个同级 <ul>
的标签。
<div>
<p>1</p>
<p>2</p>
<ul>...</ul>
<p>3</p>
<ul>...</ul>
</div>
在上面的例子中,我只希望 XPath 到 return 第二个和第三个 <p>
标记。不是第一个。我试过使用 following-sibling 但没有成功。
此 xpath 将获得 p
和 ul
直系兄弟
//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"
就足够了。