Python3 ElementTree.tostring()導致標簽前輟變為ns0/ns1處理


一、說明

python中我們經常借助xml.etree.ElementTree對xml進行處理,其中ElementTree.fromstring()將字符串格式化成et對象,ElementTree.tostring()將et對象轉回字符串。

但ElementTree.tostring()轉回字符串時,有可能會出現標簽從<config>變為<ns0:config>或<s:config>變為<ns0:config>的情況,尤其在處理soap請求的時候。

 

二、處理辦法

暫時還沒搞清楚什么情況會變什么情況不會變,但處理辦法就是使用ElementTree.register_namespace()注冊命名空間。

直接使用stackoverflow的回答(https://stackoverflow.com/questions/8983041/saving-xml-files-using-elementtree):

從效果上個人理解為:

如果父標簽的那堆xmlns中有這些url,那么如果其子孫標簽中如果有“ows”這些前輟,要認為這些前輟是合法的不要去改變他們(即不要改成ns0等);第一個‘’表示空前輟。

另外注意兩點:

一是那些url並不(一定)是什么存在標准規范的urlET也不會去訪問這些url,url就是ET分析xml時當標志使用亂來也是可以的,只要要分析xml和register_namespace的url一致即可。

二是soap也是xml,所以ElementTree處理soap引起標簽改變也同這里一樣用register_namespace處理即可。

 

三、效果演示

直接ElementTree.fromstring()-ElementTree.tostring()引起標簽自動添回ns0前輟如下:

ElementTree.fromstring()-ElementTree.tostring()前插入ET.register_namespace('', "http://www.ipc.com/ver10"),結果轉回正常如下:

 

參考:

https://stackoverflow.com/questions/8983041/saving-xml-files-using-elementtree

https://docs.python.org/3/library/xml.etree.elementtree.html#xml.etree.ElementTree.register_namespace

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM