我正在嘗試使用以下 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'}
uj5u.com熱心網友回復:
如果md:EntityDescriptor是根元素,則嘗試使用 find 查找子md:EntityDescriptor元素是行不通的。您已經選擇該元素作為根。
但是,問題是我需要對多個檔案運行相同的操作,而 md:EntityDescriptor 并不總是根元素。有沒有辦法找到一個元素而不管它是否是根?
由于您使用的是 lxml,請嘗試使用xpath()和descendant-or-self::軸而不是 find:
test = root.xpath('descendant-or-self::md:EntityDescriptor', namespaces=namespaces)
請注意,xpath()回傳一個串列。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/339837.html
上一篇:讀取XSLT檔案中的XML-Stylesheet屬性
下一篇:通過LINQ從XML反序列化
