You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 22:39:03