如何解析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
相关产品推荐
相关产品推荐

