python处理是Xml文件的,删除标签属性符合条件的!如<data name="test"id="

2024-12-21 10:13:39
推荐回答(1个)
回答1:

你可以使用 BeautifulSoup 套件:
安装:
pip install bs4

如果觉得 html 解析器不敷使用,参考文档安装其他适合的解析器。
如果想要详细了解 BeautifulSoup 也请参考官方文档(有中文版本)。
测试档:
以下是我使用的测试文件:
# delete.txt
126
147

# test.xml

123
abc


126
abc


135
abc


147
abc


代码:
from bs4 import BeautifulSoup

with open('test.xml') as reader:
xml = reader.read()

deleted_id = []

with open('delete.txt') as reader:
for line in reader:
line = line.strip()
deleted_id.append(line)

def has_delete_id(tag):
return tag.name=='re' and tag.id.string in deleted_id

soup = BeautifulSoup(xml, 'html.parser')

tags = soup(has_delete_id)
for tag in tags:
tag.decompose()

print(soup.prettify())

程式输出:


123


abc




135


abc



代码说明:
首先我们从 Beautiful Soup 的套件中汇入 BeautifulSoup 类
from bs4 import BeautifulSoup

接著分别从 delete.txt 和 test.xml 中读出要删除的 id 和主要的 xml 内容,下一步是实体化生成一个 BeautifulSoup对象 soup, 我们采用 html.parser 解析器去解析 xml:
soup = BeautifulSoup(xml, 'html.parser')

在此我们定义了一个用於过滤的 function has_delete_id,每一个在 xml 中的tag 只要是 tag 且含有想要删除的 tag 就会被检索出来:
def has_delete_id(tag):
return tag.name=='re' and tag.id.string in deleted_id

接著 soup(has_delete_id) 会帮助我们找到欲删除的 tag,接著走访搜索出来的这些 tag 并呼叫方法 decompose() 来从文件中删除该标签。
最後 soup.prettify()可以帮助我们输出修改後的文件。