поиск переменной в xml

#python #xml #elementtree

#python #xml #elementtree

Вопрос:

У меня есть несколько XML-файлов, которые мне нужно сравнить. Проблема в том, что в ней есть два элемента, которые необходимо удалить, потому что они всегда разные.

 <section name="Cache">
        <section name="Registry">
            <key name="Expiration" description="Value range: 0 - amp;amp;infin; Seconds" summary="Defines the registry entry cache expiration time" range="0-" type="integer" defaultvalue="300" modifiedby="user_x" modificationtime="2020-11-17T12:08:36.1900000 00:00" readonly="False" ismultivalue="False">300</key>
        </section>
        <section name="UserSession">
            <key name="Expiration" description="Value range: 0 - amp;amp;infin; Seconds" summary="Defines the session cache expiration time" range="0-" type="integer" defaultvalue="30" modifiedby="user_x" modificationtime="2020-11-17T12:08:36.1900000 00:00" readonly="False" ismultivalue="False">30</key>
        </section>
    </section>
  

modifiedby является константой в xml, поэтому я могу удалить ее с помощью:

 tree = ET.parse(xml1)
root = tree.getroot()

xmlstr = ET.tostring(root, encoding='utf8', method='xml')
xmlstr = xmlstr.replace(b'user_x', b'')
  

Но как я могу удалить modificationtime из xml, зная, что это переменная, которую нельзя предсказать? Это modificationtime возвращает в каждом элементе XML

Комментарии:

1. Вы хотите удалить значение только этого атрибута или вообще удалить атрибут?

Ответ №1:

Лучше выполнить все замены, работающие с ElementTree ней, прежде чем преобразовывать ее обратно в строку, иначе нет смысла вообще анализировать XML:

 import xml.etree.ElementTree as ET

tree = ET.parse(xml1)
root = tree.getroot()
# here we go
for key in root.findall('.//key'):
    key.attrib['modifiedby'] = ''
    key.attrib['modificationtime'] = ''
# and finally convert to bytestring
xmlstr = ET.tostring(root, encoding='utf8', method='xml') # add .decode() to get string
  

.//key вот выражение XPath, вы можете прочитать больше об этом в последнем стандарте языка XML Path. Это поможет вам адаптировать код для работы с XML-документом с другой структурой.