如何解决如何使用漂亮的汤和python更新xml标记内的名称
每当名称的末尾有Z-时,我都想更改父标记内名称的值。通过从表中获取值,可以说只有三个这样的模式,即名称以Z-结尾,并且我有要在列表val中更新的值。
我该怎么做?
让我们说这是我的XML,
<parent name="A-6/Z-9/B-64/Z-12">
<item>
<list>
<p name="A">
<p name ="B">
</list>
</item>
</parent>
<parent name="A1/Zh/B/C-12">
<item>
<list>
<p name="A">
<p name ="B">
</list>
</item>
</parent>
<parent name="AS-5/ZD-9/B-67/Z-13">
<item>
<list>
<p name="A">
<p name ="B">
</list>
</item>
</parent>
<parent name="An4/Zd-8/B-5/C-13">
<item>
<list>
<p name="A">
<p name ="B">
</list>
</item>
</parent>
<parent name="A-76/Z-8/B-56/Z-14">
<item>
<list>
<p name="A">
<p name ="B">
</list>
</item>
</parent>
<parent name="A-45/Z-ty/B-9/C-14">
<item>
<list>
<p name="A">
<p name ="B">
</list>
</item>
</parent>
这是我在列表val = ["Z-99","Z-98","Z-97"]
中的值
我想在XML中修复这些值,例如当父母的名字以Z结尾时 这些
<parent name="A-6/Z-9/B-64/Z-12">
<parent name="AS-5/ZD-9/B-67/Z-13">
<parent name="A-76/Z-8/B-56/Z-14">
我想要这个
<parent name="A-6/Z-9/B-64/Z-99">
<parent name="AS-5/ZD-9/B-67/Z-98">
<parent name="A-76/Z-8/B-56/Z-97">
我尝试了这些,但没有任何帮助
pattern = re.compile(r'[A-Z]+-+[0-9]+/+Z+-+[0-9]$')
for i in soup.find_all('parent',distName=pattern):
for j in val:
i.string = i.string[:-2]+str(j)
for i,val in zip(soup.select('parent > name^="Z-"')
i.string = i.string[:-2]+str(val)
解决方法
您可以尝试使用此脚本从name=
标记更改所有必需的<parent>
属性:
from bs4 import BeautifulSoup
txt = '''<parent name="A-6/Z-9/B-64/Z-12">
<item>
<list>
<p name="A"></p>
<p name="B"></p>
</list>
</item>
</parent>
<parent name="A1/Zh/B/C-12">
<item>
<list>
<p name="A"></p>
<p name="B"></p>
</list>
</item>
</parent>
<parent name="AS-5/ZD-9/B-67/Z-13">
<item>
<list>
<p name="A"></p>
<p name="B"></p>
</list>
</item>
</parent>
<parent name="An4/Zd-8/B-5/C-13">
<item>
<list>
<p name="A"></p>
<p name="B"></p>
</list>
</item>
</parent>
<parent name="A-76/Z-8/B-56/Z-14">
<item>
<list>
<p name="A"></p>
<p name="B"></p>
</list>
</item>
</parent>
<parent name="A-45/Z-ty/B-9/C-14">
<item>
<list>
<p name="A"></p>
<p name="B"></p>
</list>
</item>
</parent>'''
soup = BeautifulSoup(txt,'html.parser')
values = ["Z-99","Z-98","Z-97"]
r = re.compile(r'Z-\d+$')
for parent,new_val in zip(soup.find_all('parent',{'name': r}),values):
parent['name'] = r.sub(new_val,parent['name'])
print(soup.prettify())
打印:
<parent name="A-6/Z-9/B-64/Z-99">
<item>
<list>
<p name="A">
</p>
<p name="B">
</p>
</list>
</item>
</parent>
<parent name="A1/Zh/B/C-12">
<item>
<list>
<p name="A">
</p>
<p name="B">
</p>
</list>
</item>
</parent>
<parent name="AS-5/ZD-9/B-67/Z-98">
<item>
<list>
<p name="A">
</p>
<p name="B">
</p>
</list>
</item>
</parent>
<parent name="An4/Zd-8/B-5/C-13">
<item>
<list>
<p name="A">
</p>
<p name="B">
</p>
</list>
</item>
</parent>
<parent name="A-76/Z-8/B-56/Z-97">
<item>
<list>
<p name="A">
</p>
<p name="B">
</p>
</list>
</item>
</parent>
<parent name="A-45/Z-ty/B-9/C-14">
<item>
<list>
<p name="A">
</p>
<p name="B">
</p>
</list>
</item>
</parent>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。