gpt4 book ai didi

python - 获取带有属性的 etree 元素,或者包含带有属性的子元素

转载 作者:行者123 更新时间:2023-12-01 03:49:38 24 4
gpt4 key购买 nike

我有一个 XML 文件要解析,我需要通过 id 查找元素。

在示例代码中,我需要找到driver的名称,但我不知道我的id是否是vehicleengine ,或阻止。我想要一个可以处理 vehicle 内部任意 xml 的解决方案(但保证 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 标签,则在树中向上导航以找到它,但似乎是 python 的 elem.find如果结果在 elem 之外,() 将返回 None。

查看the docs ,他们有这个例子:

# Nodes with name='Singapore' that have a 'year' child
root.findall(".//year/..[@name='Singapore']")

但我不知道如何使其适用于任何后代,而不是特定级别的后代。

最佳答案

注意:下面的所有代码片段都使用lxml库。要安装,请运行:pip install lxml

您应该使用root.xpath(..)而不是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']

关于python - 获取带有属性的 etree 元素,或者包含带有属性的子元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38465690/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com