python xml.etree如何搜索多个属性

2024-09-30 14:26:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含以下行的XML文件:

<op type="create" file="C:/Users/mureadr/Desktop/A/HMI_FORGF/bld/armle-v7/release/SimpleNetwork/Makefile" found="0"/>

我想使用xml.etree搜索多个属性:

result = tree.search('.//op[@type="create" @file="c:/Users/mureadr/Desktop/A/HMI_FORGF/bld/armle-v7/release/HmiLogging/Makefile"]')

但我犯了个错误

raise SyntaxError("invalid predicate")

我尝试了这个(添加了and),仍然得到了相同的错误

'.//op[@type="create" and @file="c:/Users/mureadr/Desktop/A/HMI_FORGF/bld/armle-v7/release/HmiLogging/Makefile"]'

尝试添加&&,仍然收到相同的错误

'.//op[@type="create" && @file="c:/Users/mureadr/Desktop/A/HMI_FORGF/bld/armle-v7/release/HmiLogging/Makefile"]'

最后,尝试了&,仍然得到了相同的错误

'.//op[@type="create" & @file="c:/Users/mureadr/Desktop/A/HMI_FORGF/bld/armle-v7/release/HmiLogging/Makefile"]'

我猜这是xml.etree的一个限制

也许我以后不应该使用它,但我的项目差不多完成了

对于N属性,如何使用etree.xml搜索所有N属性


Tags: releasetypecreateusersmakefilefiledesktopv7
1条回答
网友
1楼 · 发布于 2024-09-30 14:26:32

可以连续使用多个方括号

'.//op[@type="create"][@file="/some/path"]'

更新:我看到您正在使用python的xml.etree模块。我不确定上述答案是否适用于该模块(它对XPath的支持非常有限)。我建议对所有XML任务使用go-to库LXML。如果您使用lxml,它将是简单的doc.xpath(".//op[..][..]")

相关问题 更多 >