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

如何解析XML文件并移除文档内所有img标签的width属性

解决方法

核心逻辑

你需要分两层处理内容:外层是RSS格式的XML文档,内层是description标签内用CDATA包裹的HTML片段,XML解析器不会自动解析CDATA内的内容,所以需要单独提取处理后再回填。

  • 第一步:用XML解析工具读取原文件,保留CDATA内容不被转义
  • 第二步:提取每个description节点的文本内容,用HTML解析工具解析这段HTML
  • 第三步:遍历所有img标签,删除width属性
  • 第四步:把修改后的HTML重新封装为CDATA放回原XML节点
  • 第五步:输出修改后的完整XML内容

代码实现(Python)

先安装依赖库:

pip install lxml beautifulsoup4

示例代码:

from lxml import etree
from bs4 import BeautifulSoup

# 读取本地XML文件
with open("你的文件路径.xml", "r", encoding="utf-8") as f:
    raw_xml = f.read()

# 初始化XML解析器,配置保留CDATA内容
xml_parser = etree.XMLParser(strip_cdata=False)
xml_root = etree.fromstring(raw_xml.encode("utf-8"), xml_parser)

# 遍历所有item下的description节点
for desc_node in xml_root.xpath("//item/description"):
    html_content = desc_node.text
    if not html_content:
        continue
    # 解析CDATA内的HTML
    soup = BeautifulSoup(html_content, "html.parser")
    # 删除所有img标签的width属性
    for img_tag in soup.find_all("img"):
        if "width" in img_tag.attrs:
            del img_tag["width"]
    # 把修改后的HTML封装回CDATA,替换原节点内容
    desc_node.text = etree.CDATA(str(soup))

# 生成修改后的XML内容
result_xml = etree.tostring(
    xml_root,
    encoding="unicode",
    pretty_print=True,
    xml_declaration=True
)

# 可以选择写入新文件或者直接返回内容
with open("修改后的文件.xml", "w", encoding="utf-8") as f:
    f.write(result_xml)

说明

  • 如果你不需要存储为文件,直接使用result_xml变量即可得到修改后的文本内容
  • 如需同时删除height、srcset等其他img属性,在删除width的逻辑中追加对应代码即可
  • 代码适配你提供的RSS格式XML,无需额外修改命名空间匹配规则

内容的提问来源于stack exchange,提问作者P J

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 09:54:08