Python使用lxml提取XML文件中带内部标签的content内容并保留标签的方法
解决方案
首先先修正你现有代码的两处基础错误:
- 你定义的
xmlData = []为列表类型,后续使用字典键赋值会触发类型错误,需要修改为xmlData = {} - 你直接将文件路径赋值给
tree变量,没有完成XML解析加载,需要先调用etree.parse()处理文件
核心实现逻辑
你需要的效果可以直接用lxml自带的etree.tostring()方法实现,该方法可以将指定节点及其所有子节点完整序列化,自动保留所有内部标签和原有内容顺序,无需手动拼接标签。
完整可运行代码示例:
from lxml import etree xmlData = {} # 加载解析XML文件 tree = etree.parse('/folder/test/xml') # 原有title、subtitle提取逻辑 for title in tree.xpath("/document/body/title"): xmlData['title'] = title.text for subtitle in tree.xpath("/document/body/subtitle"): xmlData['subtitle'] = subtitle.text # 提取content节点完整内容 content_node = tree.xpath("/document/body/content")[0] # 保留<content>外层标签 + 所有内部标签内容 xmlData['content_with_wrapper'] = etree.tostring(content_node, encoding='unicode', method='html').strip() # 仅保留content内部的所有标签内容(去掉外层<content>标签) xmlData['content'] = ''.join([ etree.tostring(child, encoding='unicode', method='html') for child in content_node.iterchildren() ]).strip()
效果说明
序列化得到的content内容和原XML中的结构完全一致,p、em、strong标签的位置、内容都不会出现错位,也不会额外插入不存在的标签内容。
内容的提问来源于stack exchange,提问作者Menryck
相关产品推荐
相关产品推荐

