我有一个XML文件要解析,我需要按id查找元素。
在示例代码中,我需要找到的名字driver
,但我不知道我的ID是否为vehicle
,engine
或block
。我想要一个可以在其中使用任意xml的解决方案vehicle
(但driver
可以保证存在)。
<road>
<vehicle id="16">
<driver>Bob Johnson</driver>
<engine id="532">
<type>V8</type>
<block id="113">
<material>Aluminium</material>
</block>
</engine>
</vehicle>
<vehicle id="452">
<driver>Dave Edwards</driver>
<engine id="212">
<type>Inline 6</type>
<block id="381">
<material>Cast Iron</material>
</block>
</engine>
</vehicle>
</road>
我尝试了什么
我试图通过它们的id来获取元素,然后,如果它们不是vehicle
标签,则在树上导航以找到它,但是elem.find()
如果结果为outside ,则python似乎返回None elem
。
查看文档,他们有这个例子:
# Nodes with name='Singapore' that have a 'year' child
root.findall(".//year/..[@name='Singapore']")
但是我看不到如何使任何后代都可以使用该功能,而不是在特定级别上使用后代。
注意:以下所有代码段均使用lxml
库。要安装,请运行:pip install lxml
。
您应该使用root.xpath(..)
not root.findall(..)
。
>>> root.xpath("//vehicle/driver/text()")
['Bob Johnson', 'Dave Edwards']
如果要从给定的ID中提取驱动程序的名称,则可以执行以下操作:
>>> vehicle_id = "16"
>>> xpath("//vehicle[@id='16' or .//*[@id='16']]/driver/text()")
['Bob Johnson']
更新:要获取id
嵌套在任何级别的给定驱动程序名称,请执行以下操作:
>>> i = '16'
>>> a.xpath("//vehicle[@id='%s' or .//*[@id='%s']]/driver/text()"%(i,i))
['Bob Johnson']
>>> i = '532'
>>> a.xpath("//vehicle[@id='%s' or .//*[@id='%s']]/driver/text()"%(i,i))
['Bob Johnson']
>>> i = '113'
>>> a.xpath("//vehicle[@id='%s' or .//*[@id='%s']]/driver/text()"%(i,i))
['Bob Johnson']
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句