[英]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.