1
如何生成和解析XML以下使用lxml
之類的?如何在使用lxml的XML元素名稱中使用「:」?
<s:Envelope xmlns:s="a" xmlns:a="http_//www.w3.org/2005/08/addressing">
....
</s:Envelope>
我目前交換:當我解析和生成XML時,在元素名稱中使用_,但它看起來很愚蠢。
如何生成和解析XML以下使用lxml
之類的?如何在使用lxml的XML元素名稱中使用「:」?
<s:Envelope xmlns:s="a" xmlns:a="http_//www.w3.org/2005/08/addressing">
....
</s:Envelope>
我目前交換:當我解析和生成XML時,在元素名稱中使用_,但它看起來很愚蠢。
目前尚不清楚究竟你問什麼,但也許這將幫助:
的元素,如<s:Envelope>
使用XML命名空間前綴。這用於表示本文檔中的s:Envelope
屬性在a
命名空間中定義。
LXML表示使用在大括號中命名空間前綴,例如XML名稱空間:{a}Envelope
。你的榜樣文件是有點令人困惑,因爲你還明確了a:
命名空間前綴,所以:
a:Element
相當於{http://www.w3.org/2005/08/addressing}Element
,並s:Element
相當於{a}Element
。許多LXML命令讓你提供一個命名空間前綴映射。例如,要查找您的文檔使用XPATH的Envelope
元素,你可以這樣做:
import lxml.etree as etree
doc = etree.parse('mydocument.xml')
envelope = doc.xpath('//s:Envelope',
namespaces={'s': 'a'})
注意,這是完全等同於:
envelope = doc.xpath('//x:Envelope',
namespaces={'x': 'a'})
也就是說,命名空間前綴沒有按不必與源XML文檔中使用的內容匹配;只有絕對命名空間很重要。
你可以閱讀更多關於LXML和命名空間here。