Я ищу элегантный способ открыть серию XML-файлов в папке, записать все значения элементов в словарь, затем удалить значения элементов для элементов только внутри родительского элемента body и сохранить как файл шаблона
Вот пример различных файлов XML, которые я использую, в этих примерах я пытаюсь удалить значения:
spinach,cabbage and broccoli:
xml File1
<?xml version="1.0"?>
<rootelement>
<Header>
<Somebranch>
<Somebranchitem1>HeaderValue1</Somebranchitem1>
<Somebranchitem2>HeaderValue2</Somebranchitem2>
</Somebranch>
<anitem>1</anitem>
</Header>
<Body>
<BodyItem>
<subbodyitem>spinach</subbodyitem>
</BodyItem>
</Body>
</rootelement>
xml File2
<?xml version="1.0"?>
<rootelement>
<Header>
<Somebranch>
<Somebranchitem1>HeaderValue1</Somebranchitem1>
<Somebranchitem2>HeaderValue2</Somebranchitem2>
</Somebranch>
<anitem>123e</anitem>
</Header>
<Body>
<AnItem>
<Adifferentnameditem>cabbage</Adifferentnameditem>
<Adifferentnameditem2>broccoli</Adifferentnameditem2>
</AnItem>
</Body>
</rootelement>
После извлечения я хочу создать новый файл в виде шаблона, похожего на этот:
<?xml version="1.0"?>
<rootelement>
<Header>
<Somebranch>
<Somebranchitem1>HeaderValue1</Somebranchitem1>
<Somebranchitem2>HeaderValue2</Somebranchitem2>
</Somebranch>
<anitem>123e</anitem>
</Header>
<Body>
<AnItem>
<Adifferentnameditem></Adifferentnameditem>
<Adifferentnameditem2></Adifferentnameditem2>
</AnItem>
</Body>
</rootelement>
Я могу извлечь значения в словарь, но поскольку подэлементы 'Body' имеют разные имена в зависимости от файла XML, у меня возникают проблемы при создании универсального цикла.
Вот мой код функции:
import lxml.etree as et
def process_xml(xmlfilename):
doc = et.parse(xmlfilename)
params_dict = {}
for tag in doc.iter():
if not len(tag):
element_name = tag.tag
element_value = tag.text
#print(tag.tag, ' >>>>>> ', tag.text)
params_dict[element_name] = [element_value,]
try:
if tag in doc.xpath('//Body')
# Do stuff
# Remove sub-elements value
# Then save as a new file
except:
print('It did not work')