L xml заменить тег на несколько других на месте - PullRequest
0 голосов
/ 04 августа 2020

Итак, я использую L XML для анализа / редактирования файла 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.

1 Ответ

0 голосов
/ 05 августа 2020

Другой метод.

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>
...