outermost()函数用于筛选节点序列中最外层的节点,即移除被其他选中节点包含的后代节点,保留不被包含的祖先节点。例如在表达式outermost(//section | //p)中,若<section>包含<p>,则只保留<section>和未被包含的<p id="p3"/>,结果为<section id="s1"/>和<p id="p3"/>。与innermost()相反,后者保留最内层节点。outermost()适用于网页内容块提取、数据去重、错误标记筛选等场景,能有效避免层级重复。需注意其仅支持XPath 3.1及以上版本,输入必须为节点序列,且对大型序列可能存在性能开销。

XPath的
outermost()
outermost()
举个例子,想象我们有这样的XML结构:
<root>
<section id="s1">
<p id="p1">This is a paragraph.</p>
<div id="d1">
<p id="p2">Another paragraph.</p>
</div>
</section>
<p id="p3">Standalone paragraph.</p>
</root>如果我们用一个XPath表达式,比如
//section | //p
<section id="s1">
<p id="p1">
<p id="p2">
<p id="p3">
现在,如果我们在这个序列上应用
outermost()
outermost(//section | //p)
<section id="s1">
<p id="p1">
<p id="p2">
<p id="p1">
<p id="p2">
<section id="s1">
<p id="p3">
所以,最终的结果序列将是:
<section id="s1">
<p id="p3">
这非常实用,尤其是当你写了一个比较宽泛的XPath,可能不小心把父子节点都抓进来了,但你只想处理那些“最高级别”的匹配项时。
outermost()
innermost()
说起来,
outermost()
innermost()
outermost()
而
innermost()
我们还是用刚才的例子:
outermost(//section | //p)
<section id="s1">
<p id="p3">
如果用
innermost(//section | //p)
<section id="s1">
<p id="p1">
<p id="p2">
<section id="s1">
<p id="p1">
<p id="p2">
<p id="p3">
所以,
innermost(//section | //p)
<p id="p1">
<p id="p2">
<p id="p3">
什么时候用哪个呢?这完全取决于你的目的。如果你想抓取页面上独立的、最高级别的内容块,比如文章主体、侧边栏、页脚等,
outermost()
innermost()
outermost()
outermost()
我常常在想,XPath的设计者们为什么会想到加入
outermost()
//*[contains(@class, 'content')]
outermost()
实际应用场景其实挺多的:
div
div
div
p
outermost()
outermost()
outermost()
div
section
outermost()
这函数用起来,感觉就像是给你的XPath选择器加了一个智能过滤器,让结果更符合直觉和实际需求。
outermost()
虽然
outermost()
首先,性能方面。
outermost()
其次,可用性。
outermost()
outermost()
还有一些注意事项:
outermost()
outermost()
outermost()
outermost()
总的来说,
outermost()
以上就是XPath的outermost()函数处理什么节点?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号