最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python中xml.etree.ElementTree的使用示例

 更新時(shí)間:2024年09月20日 11:32:10   作者:pumpkin84514  
ElementTree是Python標(biāo)準(zhǔn)庫(kù)中的一個(gè)模塊,專(zhuān)門(mén)用于處理XML文件,它提供了解析、創(chuàng)建、修改和遍歷XML文檔的API,非常適合處理配置文件、數(shù)據(jù)交換格式和Web服務(wù)響應(yīng)等場(chǎng)景,本文就來(lái)介紹一下,感興趣的可以了解一下

xml.etree.ElementTree(簡(jiǎn)稱(chēng)ElementTree)是Python標(biāo)準(zhǔn)庫(kù)中用于處理XML文件的模塊。它提供了簡(jiǎn)潔且高效的API,適用于解析、創(chuàng)建和修改XML文檔。在需要處理XML數(shù)據(jù)的場(chǎng)景中,比如配置文件、數(shù)據(jù)交換格式、Web服務(wù)響應(yīng)等,ElementTree都是非常實(shí)用的工具。

一、基本使用場(chǎng)景

  • 解析XML文檔:讀取并解析XML文檔,將其轉(zhuǎn)換為樹(shù)結(jié)構(gòu)以便進(jìn)一步操作。
  • 創(chuàng)建XML文檔:從頭開(kāi)始構(gòu)建XML文檔,并將其保存到文件中。
  • 修改XML文檔:在解析后的XML樹(shù)中添加、刪除或修改元素。
  • 搜索與遍歷XML樹(shù):查找特定的元素或?qū)傩?,遍歷整個(gè)XML樹(shù)結(jié)構(gòu)。

二、核心API與用法

1. 解析XML文檔

解析字符串形式的XML:

import xml.etree.ElementTree as ET

xml_data = '''<data>
    <user>
        <name>John</name>
        <age>30</age>
    </user>
</data>'''

root = ET.fromstring(xml_data)
print(root.tag)

輸出:

data

解析XML文件:

import xml.etree.ElementTree as ET

tree = ET.parse('example.xml')
root = tree.getroot()
print(root.tag)

輸出:

data

2. 創(chuàng)建XML文檔

import xml.etree.ElementTree as ET

# 創(chuàng)建根元素
root = ET.Element('data')

# 創(chuàng)建子元素
user = ET.SubElement(root, 'user')
name = ET.SubElement(user, 'name')
name.text = 'John'
age = ET.SubElement(user, 'age')
age.text = '30'

# 將XML樹(shù)寫(xiě)入文件
tree = ET.ElementTree(root)
tree.write('output.xml', encoding='utf-8', xml_declaration=True)

生成的output.xml內(nèi)容:

<?xml version='1.0' encoding='utf-8'?>
<data>
    <user>
        <name>John</name>
        <age>30</age>
    </user>
</data>

3. 修改XML文檔

修改現(xiàn)有元素的文本內(nèi)容:

import xml.etree.ElementTree as ET

tree = ET.parse('output.xml')
root = tree.getroot()

# 修改元素內(nèi)容
root.find('user/name').text = 'Jane'

tree.write('output_modified.xml', encoding='utf-8', xml_declaration=True)

output_modified.xml內(nèi)容:

<?xml version='1.0' encoding='utf-8'?>
<data>
    <user>
        <name>Jane</name>
        <age>30</age>
    </user>
</data>

4. 搜索與遍歷XML樹(shù)

遍歷所有子元素:

import xml.etree.ElementTree as ET

tree = ET.parse('output.xml')
root = tree.getroot()

for child in root.iter():
    print(child.tag, child.text)

輸出:

data None
user None
name John
age 30

查找特定元素:

import xml.etree.ElementTree as ET

tree = ET.parse('output.xml')
root = tree.getroot()

name = root.find('user/name')
print(name.text)

輸出:

John

三、進(jìn)階用法

1. 處理帶有命名空間的XML

命名空間在復(fù)雜XML文檔中非常常見(jiàn),用于區(qū)分不同元素的作用域。

解析帶有命名空間的XML:

import xml.etree.ElementTree as ET

xml_data = '''<root xmlns:h="http://www.w3.org/TR/html4/" xmlns:f="http://www.w3schools.com/furniture">
    <h:table>
        <h:tr>
            <h:td>Apples</h:td>
            <h:td>Bananas</h:td>
        </h:tr>
    </h:table>
    <f:table>
        <f:name>African Coffee Table</f:name>
        <f:width>80</f:width>
        <f:length>120</f:length>
    </f:table>
</root>'''

root = ET.fromstring(xml_data)

# 使用命名空間解析
for table in root.findall('{http://www.w3.org/TR/html4/}table'):
    for td in table.findall('{http://www.w3.org/TR/html4/}td'):
        print(td.text)

輸出:

Apples
Bananas

2. 使用XPath查找元素

雖然ElementTree本身不支持完整的XPath語(yǔ)法,但提供了類(lèi)似的路徑查找功能。

import xml.etree.ElementTree as ET

xml_data = '''<root>
    <users>
        <user id="1">
            <name>John</name>
        </user>
        <user id="2">
            <name>Jane</name>
        </user>
    </users>
</root>'''

root = ET.fromstring(xml_data)

# 查找id為2的用戶(hù)的名稱(chēng)
name = root.find('.//user[@id="2"]/name').text
print(name)

輸出:

Jane

3. 批量處理和轉(zhuǎn)換XML

當(dāng)需要處理大量的XML數(shù)據(jù)時(shí),可以利用生成器或者批量處理方法來(lái)提高效率。

import xml.etree.ElementTree as ET

def parse_large_xml(file):
    context = ET.iterparse(file, events=('start', 'end'))
    for event, elem in context:
        if event == 'end' and elem.tag == 'user':
            yield elem
            elem.clear()  # 清除元素以節(jié)省內(nèi)存

for user in parse_large_xml('large_users.xml'):
    print(user.find('name').text)

四、常用技巧

1. 使用生成器高效解析大文件

如上所述,使用iterparse()和生成器可以有效節(jié)省內(nèi)存并提高處理速度,適用于大文件的解析。

2. 自動(dòng)縮進(jìn)與格式化輸出

默認(rèn)情況下,ElementTree生成的XML是無(wú)縮進(jìn)的,可以通過(guò)手動(dòng)調(diào)整生成XML的格式來(lái)使其更具可讀性。

import xml.etree.ElementTree as ET

def indent(elem, level=0):
    i = "\n" + level*"  "
    if len(elem):
        if not elem.text or not elem.text.strip():
            elem.text = i + "  "
        if not elem.tail or not elem.tail.strip():
            elem.tail = i
        for subelem in elem:
            indent(subelem, level+1)
        if not elem.tail or not elem.tail.strip():
            elem.tail = i
    else:
        if level and (not elem.tail or not elem.tail.strip()):
            elem.tail = i

root = ET.Element("root")
child = ET.SubElement(root, "child")
indent(root)
tree = ET.ElementTree(root)
tree.write("output_pretty.xml", encoding="utf-8", xml_declaration=True)

生成的output_pretty.xml內(nèi)容:

<?xml version='1.0' encoding='utf-8'?>
<root>
  <child />
</root>

3. 安全處理外部實(shí)體

在處理來(lái)自不受信任源的XML數(shù)據(jù)時(shí),最好禁用外部實(shí)體,以防止XML外部實(shí)體注入(XXE)攻擊。

import xml.etree.ElementTree as ET
from defusedxml.ElementTree import parse, fromstring

# 安全地解析XML
tree = parse('example.xml')
root = tree.getroot()

# 或者
root = fromstring(xml_data)

defusedxml庫(kù)提供了更安全的XML解析方法,防止常見(jiàn)的安全漏洞。

到此這篇關(guān)于Python中xml.etree.ElementTree的使用示例的文章就介紹到這了,更多相關(guān)Python xml.etree.ElementTree內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python實(shí)現(xiàn)的調(diào)用C語(yǔ)言函數(shù)功能簡(jiǎn)單實(shí)例

    Python實(shí)現(xiàn)的調(diào)用C語(yǔ)言函數(shù)功能簡(jiǎn)單實(shí)例

    這篇文章主要介紹了Python實(shí)現(xiàn)的調(diào)用C語(yǔ)言函數(shù)功能,結(jié)合簡(jiǎn)單實(shí)例形式分析了Python使用ctypes模塊調(diào)用C語(yǔ)言函數(shù)的具體步驟與相關(guān)操作技巧,需要的朋友可以參考下
    2019-03-03
  • 利用Python實(shí)現(xiàn)崗位的分析報(bào)告

    利用Python實(shí)現(xiàn)崗位的分析報(bào)告

    這篇文章主要為大家詳細(xì)介紹了如何利用Python實(shí)現(xiàn)崗位的分析報(bào)告,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-03-03
  • Python以表格形式輸出內(nèi)容到終端的常見(jiàn)方式

    Python以表格形式輸出內(nèi)容到終端的常見(jiàn)方式

    在Python編程語(yǔ)言中,我們經(jīng)常需要在終端輸出數(shù)據(jù),并且有時(shí)候需要以表格的形式展示數(shù)據(jù),本文將介紹如何在Python中使用這些庫(kù)來(lái)輸出表格,需要的可以參考下
    2025-05-05
  • python讀寫(xiě)ini文件示例(python讀寫(xiě)文件)

    python讀寫(xiě)ini文件示例(python讀寫(xiě)文件)

    項(xiàng)目用到數(shù)據(jù)庫(kù),多個(gè)地方使用,不能硬編碼。ython支持ini文件的讀取,就在項(xiàng)目中使用了ini文件,下面是示例
    2014-03-03
  • 淺談pandas dataframe對(duì)除數(shù)是零的處理

    淺談pandas dataframe對(duì)除數(shù)是零的處理

    這篇文章主要介紹了淺談pandas dataframe對(duì)除數(shù)是零的處理,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Python Zipfile模塊進(jìn)行ZIP文件的創(chuàng)建解壓信息獲取和加密等操作

    Python Zipfile模塊進(jìn)行ZIP文件的創(chuàng)建解壓信息獲取和加密等操作

    這篇文章主要為大家介紹了Python Zipfile模塊進(jìn)行ZIP文件的創(chuàng)建解壓信息獲取和加密等操作,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • 如何判斷pytorch是否支持GPU加速

    如何判斷pytorch是否支持GPU加速

    這篇文章主要介紹了判斷pytorch是否支持GPU加速的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Python中PyAutoGUI幫助文檔(推薦!)

    Python中PyAutoGUI幫助文檔(推薦!)

    PyAutoGui是一個(gè)跨平臺(tái)GUI自動(dòng)化庫(kù),PyAutoGUI是一個(gè)Python模塊,用于以編程方式控制鼠標(biāo)和鍵盤(pán),下面這篇文章主要給大家介紹了關(guān)于Python中PyAutoGUI幫助文檔的相關(guān)資料,需要的朋友可以參考下
    2022-03-03
  • python except異常處理之后不退出,解決異常繼續(xù)執(zhí)行的實(shí)現(xiàn)

    python except異常處理之后不退出,解決異常繼續(xù)執(zhí)行的實(shí)現(xiàn)

    這篇文章主要介紹了python except異常處理之后不退出,解決異常繼續(xù)執(zhí)行的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-04-04
  • Python2.6版本pip安裝步驟解析

    Python2.6版本pip安裝步驟解析

    這篇文章主要介紹了Python2.6版本pip安裝步驟解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08

最新評(píng)論

施甸县| 哈尔滨市| 新疆| 怀柔区| 株洲县| 江永县| 商丘市| 常德市| 固始县| 河北区| 文登市| 榆树市| 徐闻县| 武陟县| 徐闻县| 疏勒县| 方山县| 高唐县| 海丰县| 保亭| 马鞍山市| 横山县| 霍城县| 台北县| 新沂市| 甘南县| 阜平县| 玉树县| 怀来县| 阿拉善左旗| 广宗县| 静海县| 太仆寺旗| 浮梁县| 秦皇岛市| 深州市| 金阳县| 绍兴县| 平罗县| 邵武市| 石屏县|