【发布时间】:2021-12-12 07:07:04
【问题描述】:
我正在尝试使用以下 Python 代码查找名为“md:EntityDescriptor”的 XML 元素:
def parse(filepath):
xmlfile = str(filepath)
doc1 = ET.parse(xmlfile)
root = doc1.getroot()
test = root.find('md:EntityDescriptor', namespaces)
print(test)
这是我的 XML 文档的开始,它是一个 SAML 断言。为了可读性和安全性,我省略了其余部分,但我要搜索的元素实际上是在开头:
<?xml version="1.0" encoding="UTF-8"?>
<md:EntityDescriptor ...
我有一个定义“md”和其他几个名称空间:
namespaces = {'md': 'urn:oasis:names:tc:SAML:2.0:metadata'}
然而print(test) 的输出是None。
运行ET.dump(root) 输出文件的全部内容,所以我知道我传递的输入没有问题。运行print(root.nsmap) 返回:
{'md': 'urn:oasis:names:tc:SAML:2.0:metadata'}
【问题讨论】:
-
如果 md:EntityDescriptor 是根元素,尝试使用
find查找子 md:EntityDescriptor 元素是行不通的。您已经将该元素选为root。 -
@DanielHaley 果然,这就是问题所在。但是,问题是我需要对多个文件运行相同的操作,并且 md:EntityDescriptor 并不总是根元素。有没有办法找到一个元素,不管它是否是根?