亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

python解析xml文件并修改其屬性值方式

 更新時(shí)間:2025年02月19日 15:55:28   作者:愛(ài)吃面條的小白  
本文介紹了兩種解析和修改XML文件的方法:使用Python自帶的xml.etree.ElementTree和第三方的lxml,lxml方法可以添加standalone屬性,而ElementTree則不能

python解析xml文件并修改其屬性值

本文章主要介紹了python 解析xml文件,修改其屬性,并且進(jìn)行回寫的過(guò)程,博主目前發(fā)現(xiàn)有兩種方式進(jìn)行實(shí)現(xiàn);但是兩種實(shí)現(xiàn)有如下區(qū)別:

  • 采用 python自帶的包 xml.etree.ElementTree 進(jìn)行xml解析和回寫,無(wú)法給xml文件添加standalone=‘yes’ 屬性
  • 采用 第三方包 lxml 進(jìn)行xml解析和回寫,可以在xml文件添加standalone=‘yes’ 屬性

詳細(xì)的區(qū)別請(qǐng)看下面的內(nèi)容

一. 采用 python 自帶包進(jìn)行xml解析

實(shí)現(xiàn)給textCompent增加一個(gè)屬性 status= development

  • xml 文件的內(nèi)容如下
<?xml version='1.0' encoding='utf-8'?>
<config>
    <set_status>development</set_status>
    <component>
        <componentElement name="occN">
            <textCompent name="apk1" status="online" />
            <textCompent name="apk2" status="online" />
            <textCompent name="apk3" status="online" />
            <textCompent name="apk4" status="online" />
            <textCompent name="apk5" status="online" />
        </componentElement>
        <componentElement name="occK">
            <textCompent name="apk1" status="online" />
            <textCompent name="apk2" status="online" />
            <textCompent name="apk3" status="online" />
            <textCompent name="apk4" status="online" />
            <textCompent name="apk5" status="online" />
        </componentElement>
    </component>
</config>
  • 修改后的xml文件
<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<config>
    <set_status>development</set_status>
    <component>
        <componentElement name="occN">
            <textCompent name="apk1" status="development"/>
            <textCompent name="apk2" status="development"/>
            <textCompent name="apk3" status="development"/>
            <textCompent name="apk4" status="development"/>
            <textCompent name="apk5" status="development"/>
        </componentElement>
        <componentElement name="occK">
            <textCompent name="apk1" status="development"/>
            <textCompent name="apk2" status="development"/>
            <textCompent name="apk3" status="development"/>
            <textCompent name="apk4" status="development"/>
            <textCompent name="apk5" status="development"/>
        </componentElement>
    </component>
</config>
  • python script xml 處理
import xml.etree.ElementTree as ET
config_file = "demol.xml"


def change_xml():
    # 解析xml文件成一個(gè)tree
    tree = ET.parse(config_file)
    # 獲取根節(jié)點(diǎn),<config>下面的內(nèi)容
    root = tree.getroot()

    global status_set
    #獲取嵌入數(shù)據(jù),例如 <set_status>development</set_status>
    status_set = root.find("set_status").text

    component_list = root.find("component")
    for component in component_list.iter('componentElement'):
        for textCompent in component.iter('textCompent'):
            # 獲取目前的屬性值,例如  <textCompent name="apk5" status="online" />
            status=textCompent.attrib.get("status")
            # 設(shè)置新的屬性值
            textCompent.set("status",status_set)
    #  xml_declaration 表示帶有文件頭,例如 <?xml version='1.0' encoding='utf-8'?>
    #  此處寫文件的時(shí)候無(wú)法設(shè)置standalone屬性,否則會(huì)報(bào)錯(cuò)
    tree.write("demol.xml", encoding="utf-8",xml_declaration=True)


if __name__ == '__main__':
    change_xml()

二. 采用第三方包lxml進(jìn)行xml的操作

實(shí)現(xiàn)給textCompent增加一個(gè)屬性 status= development

  • 下載 lxml包
pip install lxml
  • python script xml 處理:

目前發(fā)現(xiàn)的寫法區(qū)別只有:在解析xml文件和回寫xml文件時(shí)有不同,其他相同

from lxml import etree
config_file = "demol.xml"


def change_xml():
    # 解析xml文件成一個(gè)tree
    tree = etree.parse(config_file)
    # 獲取根節(jié)點(diǎn),<config>下面的內(nèi)容
    root = tree.getroot()

    global status_set
    #獲取嵌入數(shù)據(jù),例如 <set_status>development</set_status>
    status_set = root.find("set_status").text

    component_list = root.find("component")
    for component in component_list.iter('componentElement'):
        for textCompent in component.iter('textCompent'):
            # 獲取目前的屬性值,例如  <textCompent name="apk5" status="online" />
            status=textCompent.attrib.get("status")
            # 設(shè)置新的屬性值
            textCompent.set("status",status_set)

    #  xml_declaration 表示帶有文件頭,例如 <?xml version='1.0' encoding='utf-8'?>
    #  此處寫文件的時(shí)候可以standalone屬性
    tree.write("demol.xml", xml_declaration=True, pretty_print=True, encoding=tree.docinfo.encoding,
                   standalone=tree.docinfo.standalone)

if __name__ == '__main__':
    change_xml()
  • 修改后的xml文件
<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<config>
    <set_status>development</set_status>
    <component>
        <componentElement name="occN">
            <textCompent name="apk1" status="development"/>
            <textCompent name="apk2" status="development"/>
            <textCompent name="apk3" status="development"/>
            <textCompent name="apk4" status="development"/>
            <textCompent name="apk5" status="development"/>
        </componentElement>
        <componentElement name="occK">
            <textCompent name="apk1" status="development"/>
            <textCompent name="apk2" status="development"/>
            <textCompent name="apk3" status="development"/>
            <textCompent name="apk4" status="development"/>
            <textCompent name="apk5" status="development"/>
        </componentElement>
    </component>
</config>

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論