使用lxml解析XML时字符串在方括号处中断的问题求助
解决lxml解析时文本在方括号处中断的问题
嘿,作为lxml新手遇到这个问题太正常啦!我来帮你搞定~
你遇到的核心问题是:当XML节点里包含子元素(比如这里的<xref>)时,直接提取文本会被子元素截断,只拿到第一个文本片段。举个例子,你的目标节点结构大概是这样的:
<article-title> The IgM BCR is essential for survival of peripheral B cells [<xref ref-type="bibr" rid="CR34">34</xref>]. In the absence of BTK B cell... </article-title>
这里的文本被<xref>分成了三个部分:<article-title>的text(方括号前的内容)、<xref>的text(34),以及<xref>的tail(方括号后的内容)。如果你直接用node.text或者普通的text()xpath,只会拿到第一部分,自然就中断在方括号处了。
给你几个简单的解决方案:
方法1:用xpath的string()函数直接获取完整文本
可以直接在xpath表达式里使用string(),它会把目标节点下所有的文本内容(包括子元素里的)拼接起来:
import lxml.etree as etree e = open('somexml.xml', encoding='utf8') tree = etree.parse(e) # 用string()提取完整文本 full_titles = tree.xpath('/pmc-articleset/article/front/article-meta/title-group/article-title/string()') for title in full_titles: print(title)
方法2:遍历节点时用text_content()方法
lxml的元素对象自带text_content()方法,专门用来获取节点下所有文本的拼接结果,用法更直观:
import lxml.etree as etree e = open('somexml.xml', encoding='utf8') tree = etree.parse(e) titles = tree.xpath('/pmc-articleset/article/front/article-meta/title-group/article-title') for node in titles: # 用text_content()拿到完整文本 full_text = node.text_content() print(full_text)
方法3:遍历节点时用node.xpath('string()')
和方法1原理一样,只是针对单个节点来调用:
for node in titles: full_text = node.xpath('string()') print(full_text)
这三种方法都能帮你拿到完整的文本,不会在方括号处中断啦~
内容的提问来源于stack exchange,提问作者Paul Bobyrev
相关产品推荐
相关产品推荐

