在所有级别上根据 XML 中的元素名称查找属性
Find an attribute based on an elements name in XML on all levels
这是我要解析的 XML:
<State id="1">
<Initialize>
<ObjectId value="Obj1" />
<Start value="Route_1" />
<Offset value="1.0" unit="m" />
<Lane value="right1" unit="" />
</Initialize>
<Initialize>
<ObjectId value="Obj2" />
<Start value="Route_1" />
<Offset value="1.0" unit="m" />
<Lane value="right2" unit="" />
</Initialize>
</State>
我正在使用 lxml.etree 库来解析 XML 片段。我的目标是通过元素的名称找到属性的值。
示例:我想从“ObjectId”中获取“值”。如果整个xml树中有多个“ObjectId”,我只想取第一个。在这种情况下,我想得到“Obj1”作为结果。
我现在是这样做的:
import lxml.etree as LET
state = LET.XML("state.xml")
variable = "ObjectId"
for attribute in state.iter(variable):
value = attribute.attrib.get("value")
print(value)
是否有替代方法在所有 xml 级别上仅获取“ObjectId”的第一个“值”而不使用 for 循环?
感谢您的帮助!
见下文。只需使用 find
import xml.etree.ElementTree as ET
xml = '''<State id="1">
<Initialize>
<ObjectId value="Obj1" />
<Start value="Route_1" />
<Offset value="1.0" unit="m" />
<Lane value="right1" unit="" />
</Initialize>
<Initialize>
<ObjectId value="Obj2" />
<Start value="Route_1" />
<Offset value="1.0" unit="m" />
<Lane value="right2" unit="" />
</Initialize>
</State>'''
root = ET.fromstring(xml)
print(root.find('.//ObjectId').attrib['value'])
输出
Obj1
这是我要解析的 XML:
<State id="1">
<Initialize>
<ObjectId value="Obj1" />
<Start value="Route_1" />
<Offset value="1.0" unit="m" />
<Lane value="right1" unit="" />
</Initialize>
<Initialize>
<ObjectId value="Obj2" />
<Start value="Route_1" />
<Offset value="1.0" unit="m" />
<Lane value="right2" unit="" />
</Initialize>
</State>
我正在使用 lxml.etree 库来解析 XML 片段。我的目标是通过元素的名称找到属性的值。 示例:我想从“ObjectId”中获取“值”。如果整个xml树中有多个“ObjectId”,我只想取第一个。在这种情况下,我想得到“Obj1”作为结果。
我现在是这样做的:
import lxml.etree as LET
state = LET.XML("state.xml")
variable = "ObjectId"
for attribute in state.iter(variable):
value = attribute.attrib.get("value")
print(value)
是否有替代方法在所有 xml 级别上仅获取“ObjectId”的第一个“值”而不使用 for 循环?
感谢您的帮助!
见下文。只需使用 find
import xml.etree.ElementTree as ET
xml = '''<State id="1">
<Initialize>
<ObjectId value="Obj1" />
<Start value="Route_1" />
<Offset value="1.0" unit="m" />
<Lane value="right1" unit="" />
</Initialize>
<Initialize>
<ObjectId value="Obj2" />
<Start value="Route_1" />
<Offset value="1.0" unit="m" />
<Lane value="right2" unit="" />
</Initialize>
</State>'''
root = ET.fromstring(xml)
print(root.find('.//ObjectId').attrib['value'])
输出
Obj1