当前位置: 首页 > 知识库问答 >
问题:

XPath:查找所有已知的具有特定属性的标签[重复]

陈法
2023-03-14

我想得到一个列表的所有trololo标签attr属性(但不是xxx或任何其他)使用Python从以下XML:

<data>
    <test>
        <trololo attr="1">
        </trololo>
    </test>
    <test>
        <trololo>
        </trololo>
    </test>
    <test>
        <trololo attr="X">
        </trololo>
    </test>
    <test>
        <xxx attr="Y">
        </xxx>
    </test>
</data>

我尝试过使用/*[@attr],但结果也包括xxx标记。到目前为止,我尝试的所有其他变体都失败了。

我正在使用的实际Python代码:

import xml.etree.ElementTree as ET
from pprint import pprint

tree  = ET.parse('test.xml')
nodes = tree.findall('//*trololo[@attr]')

pprint(nodes)

输出:

[]

更新:

我发现这是一个命名空间问题,这使得这个问题重复。问题是我有一个根节点看起来像这样:

<data xmlns="http://example.com">

共有1个答案

长孙阳州
2023-03-14

正如@har07在注释中正确回答的那样,XPath

//trololo[@attr]

将根据请求选择具有attr属性的所有trololo元素(无论其值如何)。

这根弦,

//*trololo[@attr]

在语法上根本不是XPath表达式,但与,

//*:trololo[@attr]

在XPath 2.0(但不是XPath 1.0)下语法无效。它说在任何命名空间中选择trololol元素。要忽略XPath 1.0中的命名空间(但您确实不应该这样做),请使用local-name()

//*[local-name() = 'trololo' and @attr]
  • 具有命名属性的所有元素:/*[@attr]
  • 具有任何属性的所有元素:/*[@*]
 类似资料:
  • 问题内容: 如何使用BeautifulSoup搜索仅包含我要搜索的属性的标签? 例如,我要查找所有标签。 如下代码: 获取我想要的所有数据,还获取具有该属性的所有标签 我也试过了: 这什么也不返回(可能是由于正则表达式不好) 我想知道在BeautifulSoup中是否有一种方法可以说“查找唯一属性为”的标签 *例如,如果HTML文档包含以下标记,则为 *UPDATE : 我只希望第一个标签()返回

  • 问题内容: 我有一些复杂的对象,例如猫,它具有许多属性,例如年龄,喜爱的猫食等等。 Java集中存储了一堆猫,我需要查找所有3岁的猫,或者最喜欢猫粮的Whiskas。当然,我可以编写一个自定义方法来查找那些具有特定属性的Cat,但是这样做会麻烦许多属性。有一些通用的方法吗? 问题答案: 您可以编写一个采用接口实例的方法,该实例定义了一个方法,该方法可以通过所需的任何属性检查来实现。 更好的是,使其

  • 下面是适当的方法签名的样子: (问题领域是扑克;列举奥马哈扑克牌中所有可能的板卡组合。是的,还有其他方法可以解决这个问题,但我正在测试这个方法,因为处理比特比大多数其他选择要快得多。)

  • 我有一个SVG文档,其中包含类似于以下内容的节点: 我想做的只是选择

  • 问题内容: 我是AngularJS的新手。我了解到可以使用以下查询在DOM中找到元素: 这对于按ID或CSS类名查找元素很有用。但是,我需要能够使用其他方法来查找元素。我有一个看起来像下面的元素: 我无法查询“ myContainer”,因为它已被重用了多少。因此,我想找到任何具有“ my- directive”属性的元素。如何搜索DOM并找到任何使用“我的指令”的元素? 问题答案: 您应该在指令

  • 问题内容: 我有这个数据结构,在这里组织待办事项以遵循路径/ todos / uid / 我想查询待办事项以获取所有记录。使用firebase(angularfire)是否可能,我应该怎么做?还是我应该进一步规范化并安排路径/私人路线,以免走下待办事项? 问题答案: Firebase中没有子句。请查看此线程,以获取有关按多个字段进行搜索的一些出色的结构性技巧,有关数据库样式查询的该线程,有关查询的