如何用XPath去除文本换行与空格并提取全部节点文本?
提取所有
节点去空格文本的解决方案
你遇到的问题是因为直接对所有
节点的文本集合调用normalize-space(),导致合并成了单个结果。要获取每个
节点的无多余空格文本,需要对每个
节点单独应用该方法,以下是具体实现方式:
1. 直接用XPath表达式批量处理
使用XPath的节点级调用语法,遍历所有
节点并逐个处理:
//p/normalize-space()
这个表达式会返回一个文本列表,每个元素对应一个
节点处理后的内容——自动去除开头/结尾的空格、换行、 ,并将中间连续空白替换为单个空格。
2. 代码层面逐个处理(以Python lxml为例)
如果通过代码实现,先获取所有
节点,再对每个节点单独执行文本归一化:
from lxml import etree # 示例HTML(替换为你的实际页面内容) html_content = """ <html> <head></head> <body> <p> 5-8 </p> <p></br>5-8</br></p> <p> </br>5-8 </br></p> </body> </html> """ tree = etree.HTML(html_content) # 获取所有<p>节点 p_elements = tree.xpath('//p') # 逐个节点应用normalize-space() cleaned_texts = [etree.XPath('normalize-space()')(elem) for elem in p_elements] # 输出结果:['5-8', '5-8', '5-8'] print(cleaned_texts)
核心要点
normalize-space()的作用是处理单个节点内的文本,只要确保是对每个独立的
节点调用该方法,就能得到所有节点对应的去空格文本,而不会合并成单个结果。
内容的提问来源于stack exchange,提问作者Abafi
相关产品推荐
相关产品推荐

