string()函数的作用是将任意数据类型转换为字符串,对于元素节点会递归提取所有子孙文本并拼接,属性节点返回属性值,节点集则仅取第一个节点的字符串值,需注意空白符保留及节点集处理的局限性,常与normalize-space()配合使用以获得干净文本,适用于提取完整文本内容的场景,但不能获取多个节点的全部文本,必须通过遍历解决,总结来说string()函数是xpath中用于简化文本提取的核心工具,使用时需注意其隐式转换、空白处理和节点集行为,结合normalize-space()可有效避免常见问题,最终实现高效精准的文本抓取。

XPath的
string()
string()
string()
string()
string(@href)
href
<!--
-->
true()
false()
123
1.5
string()
例如,如果你有一个HTML片段:
<div id="container">
Hello
<p>World</p>
<span>!</span>
</div>使用
string(//div[@id='container'])
"Hello World !"
string()
这个问题我经常被问到,也是XPath学习中的一个关键点。在我看来,
string()
text()
./text()
string()
<span>
<b>
string()
而
text()
./text()
//div/text()
div
div
<span>
<p>
text()
举个例子:
<article>
这是一段前言。
<section>
<p>这是第一段内容。</p>
<div>
<span>一些嵌套文本。</span>
更多文本。
</div>
</section>
总结部分。
</article>string(//article)
"这是一段前言。 这是第一段内容。 一些嵌套文本。 更多文本。 总结部分。"
//article/text()
"这是一段前言。"
"总结部分。"
section
div
article
所以,选择哪个取决于你的需求。如果你只是想获取一个区域的完整文本内容,不关心内部结构,
string()
text()
string()
text()
string()
在网页数据抓取(Web Scraping)中,
string()
提取完整段落或文章主体内容: 这是最常见的用途。很多网页的文章主体、商品描述、用户评论等,内部会包含大量的
<b>
<i>
<a>
<span>
text()
./text() | ./span/text() | ./a/text()
string()
string(//div[@class='article-body'])
div
获取列表项的完整文本: 想象一个无序列表
<ul>
<li>
<img>
<a>
<li>
<img src="icon.png">
<span>商品名称</span>
<a href="#">详情</a>
</li>如果你只想要“商品名称详情”这样的纯文本,
string(./li)
img
span
a
处理表格单元格的复杂内容: 表格
<td>
<div>
<p>
string(./td)
将非文本值转换为字符串进行比较或输出: 虽然不常见,但偶尔你可能需要将一个数字、布尔值或甚至节点集的第一个节点强制转换为字符串形式,以便进行字符串操作或日志输出。例如,
string(count(//item))
快速检查元素是否存在及内容: 有时候,我只是想快速判断某个元素是否存在,并且它包含的文本是否符合预期。
string()
这些场景的核心在于:你对元素的内部结构不感兴趣,只关心它最终呈现给用户的纯文本信息。
string()
string()
虽然
string()
空白符处理: 这是最常见也最容易被忽略的一点。
string()
string()
<div>
Hello
<span>World</span>
!
</div>string(//div)
"\n Hello\n World\n !\n "
normalize-space()
normalize-space(string(//div))
normalize-space()
string()
节点集只取第一个: 前面提到过,但这个“坑”太重要了,值得再强调一次。如果你写了
string(//p)
<p>
string()
<p>
<p>
<p>
string()
隐式转换的陷阱: XPath在某些操作中会进行隐式类型转换。例如,当你将一个节点与一个字符串进行比较时,该节点会隐式地转换为其字符串值。 比如:
//div[.= 'Hello World']
.
string(.)
div
'Hello World'
性能考量(微小但存在): 虽然对于绝大多数网页抓取任务来说,
string()
string()
text()
string()
总的来说,
string()
以上就是XPath的string()函数如何转换节点为字符串?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号