XML 使用 Python 解析 - 使用 Elementtree 查找属性值
XML Parsing with Python - find attribute value with Elementtree
我正在研究 XML-解析,我想获取特定值的属性。
我有一个 XML 文件(见下文),我想在 lid="diagnosticEcgSpeed" 之后的第二行中获取 val 的值,即 -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>
<setting lid="diagnosticEcgScale" val="10" unit="mm/mV" pers="" res="">
<txt id="001040" description="" type="">Amplitudenskalierung</txt>
<value lid="2" val="2" />
<value lid="5" val="5" />
<value lid="10" val="10" />
<value lid="20" val="20" />
<!-- todo: only one value is needed -> use adult value -->
<preset i="10" c="10" a="10" />
</setting>
</global>
到目前为止我试过这个代码:
import xml.etree.ElementTree as ET
tree = ET.parse('basics.xml')
root = tree.getroot()
y=root.find(".//*[@lid='diagnosticEcgSpeed']").attrib['val']
print(y)
而 return 是
Traceback (most recent call last):
File "parsing_example.py", line 5, in <module>
y=root.find(".//*[@lid='diagnosticEcgSpeed']").attrib['val']
KeyError: 'val'
我不明白获取值变量的错误是什么。
您可以使用以下 xpath: .//setting[@lid='diagnosticEcgSpeed']
检索元素,然后检索其属性。
参见下面的示例:
data = """
<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>
</global>
"""
import xml.etree.ElementTree as ET
tree = ET.fromstring(data)
y=tree.find(".//setting[@lid='diagnosticEcgSpeed']").attrib["val"]
print(y)
在您的情况下,如果您想直接从文件中提取此值,您可以使用以下命令:
import xml.etree.ElementTree as ET
tree = ET.parse('./basics.xml')
y=tree.find(".//setting[@lid='diagnosticEcgSpeed']").attrib['val']
print(y)
哪个输出:
-1
我正在研究 XML-解析,我想获取特定值的属性。 我有一个 XML 文件(见下文),我想在 lid="diagnosticEcgSpeed" 之后的第二行中获取 val 的值,即 -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>
<setting lid="diagnosticEcgScale" val="10" unit="mm/mV" pers="" res="">
<txt id="001040" description="" type="">Amplitudenskalierung</txt>
<value lid="2" val="2" />
<value lid="5" val="5" />
<value lid="10" val="10" />
<value lid="20" val="20" />
<!-- todo: only one value is needed -> use adult value -->
<preset i="10" c="10" a="10" />
</setting>
</global>
到目前为止我试过这个代码:
import xml.etree.ElementTree as ET
tree = ET.parse('basics.xml')
root = tree.getroot()
y=root.find(".//*[@lid='diagnosticEcgSpeed']").attrib['val']
print(y)
而 return 是
Traceback (most recent call last):
File "parsing_example.py", line 5, in <module>
y=root.find(".//*[@lid='diagnosticEcgSpeed']").attrib['val']
KeyError: 'val'
我不明白获取值变量的错误是什么。
您可以使用以下 xpath: .//setting[@lid='diagnosticEcgSpeed']
检索元素,然后检索其属性。
参见下面的示例:
data = """
<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>
</global>
"""
import xml.etree.ElementTree as ET
tree = ET.fromstring(data)
y=tree.find(".//setting[@lid='diagnosticEcgSpeed']").attrib["val"]
print(y)
在您的情况下,如果您想直接从文件中提取此值,您可以使用以下命令:
import xml.etree.ElementTree as ET
tree = ET.parse('./basics.xml')
y=tree.find(".//setting[@lid='diagnosticEcgSpeed']").attrib['val']
print(y)
哪个输出:
-1