获取具有属性的etree元素,或包含具有属性的子元素

哈斯金斯

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

在示例代码中,我需要找到的名字driver,但我不知道我的ID是否为vehicleengineblock我想要一个可以在其中使用任意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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从数组获取具有max属性的元素

来自分类Dev

jQuery从具有属性的元素获取ID

来自分类Dev

获取具有min属性的元素

来自分类Dev

选择具有不具有给定属性的子元素的元素的子元素

来自分类Dev

如何在 JavaScript 中获取具有特定属性的所有子元素

来自分类Dev

检查集合是否包含具有特定属性的元素

来自分类Dev

Swift-检查数组是否包含具有属性的元素

来自分类Dev

JUnit:断言集合包含具有特定属性的元素

来自分类Dev

xpath:查找具有属性和包含的元素?

来自分类Dev

如何查找具有给定属性的XML元素的子级?

来自分类Dev

获取具有“名称”属性的XML元素的标签名称

来自分类Dev

获取具有slot属性vue的元素的列表

来自分类Dev

groovy / xml-获取具有较大属性值的元素

来自分类Dev

获取具有最高属性的列表中的n个元素

来自分类Dev

XPath:获取具有位置和属性的元素

来自分类Dev

在XmlDocument中获取具有特定属性值的xml元素

来自分类Dev

如果子元素尚未具有相同的属性,则XSL将属性传递给子元素

来自分类Dev

AngularJS-查找具有属性的元素

来自分类Dev

选择具有特定属性的元素

来自分类Dev

jQuery的选择元素具有属性

来自分类Dev

具有contenteditable =“ true”的元素的属性绑定

来自分类Dev

隐藏具有特定属性的元素

来自分类Dev

XSD元素具有可变的#个属性

来自分类Dev

jQuery计算具有属性的元素

来自分类Dev

选择具有多重属性的<select>元素

来自分类Dev

使用Xpath提取具有属性的元素

来自分类Dev

追加具有name属性的元素

来自分类Dev

具有显示属性的CSS覆盖元素

来自分类Dev

XSD元素具有可变的#个属性

Related 相关文章

热门标签

归档