首页 > 解决方案 > Lxml用多个其他替换标签,就地

问题描述

所以我使用 LXML 来解析/编辑一个 XML 文件,它看起来像

<abc>
   <metadata x="..." y="..." z="...">
   ...
</abc>

并希望将其(就地)替换为

<abc>
   <tag key=x value="...">
   <tag key=y value="...">
   <tag key=z value="...">
   ...
</abc>

我该怎么做呢。我已经提取了 x、y、z 标签,但现在需要弄清楚如何使用这些数据再创建 3 个标签并将其插入回 etree 中。

标签: pythonlxml

解决方案


另一种方法。

from simplified_scrapy import SimplifiedDoc, utils, req
xml = '''
<abc>
   <metadata x="111" y="222" z="333" />
   ...
</abc>
'''
doc = SimplifiedDoc(xml)
metadata = doc.metadata
doc = SimplifiedDoc('<abc></abc>')
abc = doc.abc
for key in metadata:
  if key=='tag' or key=='html':
    continue
  abc.appendChild('<tag key="{0}" value="{1}" />'.format(key,metadata[key]))

print (doc.html)

结果:

<abc><tag key="x" value="111" /><tag key="y" value="222" /><tag key="z" value="333" /></abc>

推荐阅读