Я новичок в синтаксическом анализе, и у меня возникла проблема, которую я не знаю, как решить.

У меня есть XML-файл (см. Ниже), и я просто хочу получить значение a в предустановке, которое равно -1.

<global>
    <setting lid="diagnosticEcgSpeed"  val="-1" pers="" res="" unit="mm/s">
        <txt id="001041" description="" type="">Geschwindigkeit</txt>
        <value lid="1" val="-1" text="50"/>
        <value lid="2" val="-2" text="25"/>
        <value lid="4" val="-4" text="12,5"/>
        <!-- todo: only one value is needed -> use adult value -->
        <preset i="-1" c="-1" a="-1" />
    </setting>

Я пробовал пока этот код:

import xml.etree.ElementTree as ET
tree = ET.parse('basics.xml')
root = tree.getroot()

x=root.find(".//*[@lid='diagnosticEcgSpeed']/preset").attrib
print(x)

И я получаю:

{'i': '-1', 'c': '-1', 'a': '-1'}

Что мне нужно изменить в моих кодах, чтобы получить только значение a, а не все атрибуты в предустановке?

0
psad 24 Ноя 2021 в 15:02

1 ответ

Лучший ответ

Поскольку возвращаемое значение является самим словарем, вы можете попробовать

import xml.etree.ElementTree as ET
tree = ET.parse(r"C:\Users\🅂🄰🄺🅂🄷🄸\Downloads\new downloads\temp\abc.xml")
root = tree.getroot()

x=root.find(".//*[@lid='diagnosticEcgSpeed']/preset").attrib['a']
print(x)
2
Sakshi Sharma 24 Ноя 2021 в 15:39
Большое спасибо @Sakshi! Именно то, что я хотел. Я так много пробовал.
 – 
psad
24 Ноя 2021 в 15:51
У меня есть еще один вопрос. Вы можете мне помочь. Теперь я хотел бы получить значение val, равное -1, в той же строке, что и lid = "diagnosticsEcgSpeed". Я пробовал это: x = root.find (".//*[@ lid = 'diagnosticEcgSpeed']" ) .attrib ['val'] Но это не удается
 – 
psad
24 Ноя 2021 в 16:09
X = root.find (".//*[@ lid = 'DiagnosticEcgSpeed']"). attrib ['val'] должен возвращать значение 'val' как путем передачи ".//*[@lid='diagnosticEcgSpeed '] "мы создаем весь словарь, который также содержит val в качестве ключа. {'крышка': 'DiagnosticEcgSpeed', 'val': '-1', 'pers': '', 'res': '', 'unit': 'мм / с'}
 – 
Sakshi Sharma
24 Ноя 2021 в 17:28