簡體   English   中英

帶Python元素樹的XML解析-有時未指定命名空間

[英]XML Parsing w/ Python Element Tree - Namespace sometimes not specified

我正在嘗試解析一些有時僅設置xmlns的xml文件。 有什么方法可以確定是否使用lxml庫對其進行了設置?

我的主要問題是,使用find或findall查找元素時,如果設置了名稱空間,則不會返回任何內容,因為標記不匹配。 但是我無法對名稱空間進行硬編碼,因為有時沒有設置名稱空間。 我真的不知道該怎么做。

這是我的一些代碼示例

 tree = ET.parse(xml_file_path)
 root = tree.getroot() #ONIXmessage
 ...
 pids = product.findall("productidentifier")
 ...

所以我的主要問題是findall()方法

謝謝。

這有點痛苦,但是您可以在XPath中使用local-name()

例如,代替:

/foo/bar/baz

嘗試:

/*[local-name()='foo']/*[local-name()='bar']/*[local-name()='baz']

我很快也會遇到這個問題。 我的想法是:使用包裝函數,該函數首先嘗試獲取未指定名稱空間的元素,如果返回None ,則嘗試使用名稱空間。 如果兩個都返回None,則元素不存在。 如果未提供默認名稱空間,則使用這兩個函數(不使用if-else)會很好地工作。

如果選擇是在指定還是不指定相同的名稱空間之間,那么我認為上述方法是可以的。 如果您有多個可選名稱空間,它將使您的包裝器更加復雜,但這是一次性的工作。

不過,我們希望看到一個更優雅的解決方案。 DanielHaley的答案有效嗎?

相關選項:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM