首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用美汤和python更新xml标记中的名称

如何使用美汤和python更新xml标记中的名称
EN

Stack Overflow用户
提问于 2020-08-21 00:34:06
回答 1查看 32关注 0票数 1

每当名称的末尾有Z-时,我都会尝试更改父标记内的名称的值。通过从我的表中获取值,假设只有三种这样的模式,名称以Z结尾-并且我有值要在列表val中更新。

我该怎么做呢?

假设这是我的XML,

代码语言:javascript
复制
<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中固定这些值,因为只要父级的name以Z结尾,例如

代码语言:javascript
复制
<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">

我想要这个

代码语言:javascript
复制
<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">

我试过了,但都不管用

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-21 01:35:54

您可以尝试使用此脚本更改<parent>标记中所有必需的name=属性:

代码语言:javascript
复制
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())

打印:

代码语言:javascript
复制
<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>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63509471

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档