Как прочитать файл xml с помощью python?

У меня есть xml-файл, подобный этому

<?xml version="1.0" encoding="UTF-8"?>
<Automation_Config>
    <Path>
        <Log>.\SERVER.log</Log>
        <Flag_Path>.\Flag</Flag_Path>
        <files>.\PO</files>
    </Path>

</Automation_Config>

Я хочу прочитать файл xml и получить его элемент и назначить его переменной.

Я пробовал это, но не могу получить элемент Log.

import xml.dom.minidom
def main ():
    Load_XML = xml.dom.minidom.parse('D:/Config.xml')
    print (Load_XML.nodeName)
    print (Load_XML.firstChild.tagName)

    Log = Load_XML.getElementsByTagName ("Log")
    print (Log)

main()

person Job    schedule 05.08.2019    source источник
comment
попробуйте с stackabuse.com/reading-and-writing-xml-files -в-питоне   -  person Daniel Muñoz    schedule 05.08.2019
comment
Я настоятельно рекомендую против использовать xml.dom.minidom. Если у вас нет особой необходимости работать с очень минимальным и базовым W3C DOM API, вы хотите использовать xml.etree.ElementTree API. DOM API нацелен на то, чтобы создать минимальную точку соприкосновения между множеством языков программирования, многие из которых не так выразительны, как Python. Как следствие, работать с ним очень, очень, очень утомительно.   -  person Martijn Pieters    schedule 05.08.2019
comment
С ElementTree API получение строкового содержимого первого элемента Log так же тривиально, как tree = ET.parse(filename), а затем value = tree.find(".//Log").text.   -  person Martijn Pieters    schedule 05.08.2019


Ответы (2)


Используйте 1_:

import xml.etree.ElementTree as ET
tree = ET.parse('Config.xml')
root = tree.getroot()
print(root.findall('.//Log'))

Выход:

pawel@pawel-XPS-15-9570:~/test$ python parse_xml.py 
[<Element 'Log' at 0x7fb3f2eee9f
person pawelbylina    schedule 05.08.2019

Ниже:

import xml.etree.ElementTree as ET
xml = '''<?xml version="1.0" encoding="UTF-8"?>
<Automation_Config>
    <Path>
        <Log>.\SERVER.log</Log>
        <Flag_Path>.\Flag</Flag_Path>
        <files>.\PO</files>
    </Path>

</Automation_Config>'''

root = ET.fromstring(xml)
for idx,log_element in enumerate(root.findall('.//Log')):
  print('{}) Log value: {}'.format(idx,log_element.text))

выход

0) Log value: .\SERVER.log
person balderman    schedule 05.08.2019