Python3將xml文件解析為Python對象


一、說明

從最開始寫javascript開始,我就很煩感使用getElementById()等函數來獲取節點的方法,獲取了一個節點要訪問其子孫節點要么child半天要么就再來一個getElementById(),這是智障嗎?----所以我不喜歡beautiful soup(當然還因為他不支持xpath)。

python的json標准庫可以將json結果直接解析為python對象;python也提供了好幾個標准庫來解析xml,但我不是很明白為什么都是一些不能直接將xml解析為python對象的垃圾庫。

給一堆函數就叫功能強大嗎,這次用了下次又得重新學簡直腦殘。

類似json將xml解析為python對象,可以使用第三方庫untangle或xmltodict實現。

將以下內容保存為xml2obj.xml,后我我們就使用該文件。

<?xml version="1.0"?>
<root>
    <title>xml to python obj</title>
    <body>
        <section id="1">section1 content</section>
        <section id="2">section2 content</section>
    </body>
</root>

 

二、使用untangle將xml文件解析為python對象

pip install untangle

 代碼如下:

import untangle

# 將文件解析成對象
obj = untangle.parse('xml2obj.xml')

# 獲取<title>標簽內容
obj.root.title.__dict__['cdata']

# 獲取第一個section標簽
obj.root.body.section[0]

# 獲取第二個section標簽的id
obj.root.body.section[1]['id']

運行如下:

 

三、使用xmltodict將xml文件解析為python對象

pip install xmltodict

代碼如下:

import xmltodict

# 將xml文件解析成對象
with open('xml2obj.xml') as fd:
    dict = xmltodict.parse(fd.read())

# 獲取<title>標簽內容
dict['root']['title']

# 獲取第一個section標簽
dict['root']['body']['section'][0]

# 獲取第二個section標簽的id
dict['root']['body']['section'][1]['@id']

運行如下:

 

參考:

https://docs.python-guide.org/scenarios/xml/


免責聲明!

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



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