gpt4 book ai didi

python - ElementTree XPath 奇怪的行为

转载 作者:数据小太阳 更新时间:2023-10-29 02:42:37 27 4
gpt4 key购买 nike

你好
我在 Python 2.7 中使用 ElementTree (1.3) 并享受 XPath 功能,
然而,其中一个搜索结果让我感到惊讶。

我的 XML 示例:

<OTF>
<FECS state="disabled" version="2.2.0.0">
<BackEndCompatibility major="2.2" state="disabled">
<BackEnd state="disabled" version="2.2.0.0"/>
</BackEndCompatibility>
</FECS>
</OTF>

问题一:
当我使用 findall 获取第一个找到的元素时

version = "2.2.0.0"
found = list(txml.findall(".//BackEnd[@version='%s']" % version))
return found and found[0] or None

它什么也没找到。

然而,当我更改 XML 文件时,BackEnd 元素包含子元素

        <BackEnd state="disabled" version="2.2.0.0">
<any_dummy_element/>
</BackEnd>

然后正确找到搜索到的元素。

你遇到过这样的行为吗?
我是不是做错了什么或者这是 ElementTree 实现中的错误?

问题二:
我遇到的另一个问题是 xmlns
假设我将 XML 第一行更改为包含 xmlns:

<OTF xmlns="http://si-wiki/OTFCompatibility">
</OTF>

在这种情况下,我必须将查找字符串更改为:

".//{http://si-wiki/OTFCompatibility}BackEnd[@version='%s']"

有什么方法可以告诉 ElementTree 在解析期间忽略 xmlns 并将所有元素的名称(包括根)视为没有前缀?

问候,
兹比格涅夫

最佳答案

对于第一个问题:
当我替换行时

    found = list(txml.findall(".//BackEnd[@version='%s']" % version))
return found and found[0] or None

    found = txml.findall(".//BackEnd[@version='%s']" % version)
if found:
return found[0]
return None

然后返回正确的结果,没有虚拟 child hack。

关于python - ElementTree XPath 奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5019001/

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