python如何读取xml文件

#引入lib库
from xml.dom import minidom

#导入xml文件
dom = minidom.parse(fileXml)

#遍历子节点
for node in dom.childNodes:
    
    for model in node.childNodes:
        #得到子节点,保证节点的类型
        if model.nodeType in ( node.ELEMENT_NODE, node.CDATA_SECTION_NODE):
            #获取属性
            sCat= model.getAttribute('name')


Python读取XML配置文件小例子
配置文件如下,名字为config.xml
<?xml version="1.0"?>
<config>
    <server>server1</server>
    <server>server2</server>
    <account>account</account>
    <pwd>pwd</pwd>
</config>

Python代码如下:
from xml.dom.minidom import parse, parseString

def getText(nodelist):
    rc = ""
    for node in nodelist:
        if node.nodeType == node.TEXT_NODE:
            rc = rc + node.data
    return rc


if __name__=="__main__":
    dom1 = parse('config.xml') # parse an XML file by name

    config_element = dom1.getElementsByTagName("config")[0]
    servers = config_element.getElementsByTagName("server")
    for server in servers:
        print getText(server.childNodes)

显示结果:
mail.hundsun.com
mail.hundsun.comdd

Python读取XML配置文件还是比较简单的,主要是perse的getElementsByTagName()函数,它返回的是NodeList对象。
Python 的Library Reference上如下解释NodeList:
A NodeList represents a sequence of nodes. These objects are used in two ways in the DOM Core recommendation: the Element objects provides one as its list of child nodes, and the getElementsByTagName() and getElementsByTagNameNS() methods of Node return objects with this interface to represent query results.


对NodeList中的每个Node,调用getText函数,如果是TEXT_NODE类型的,则将其打印出。
Node的childNodes的说明如下:

childNodes
A list of nodes contained within this node. This is a read-only attribute.
DOM的常用节点:
节点类型                                  例子
Document type                    <!DOCTYPE food SYSTEM "food.dtd">
Processing instruction              <?xml version="1.0"?>
Element                          <drink type="beer">Carlsberg</drink>
Attribute                          type="beer"
Text                               Carlsberg

Node 有个nodeValue属性,开始不知道和node的data属性有何差别,后来查了DOM的文档,如下解释:
XML 对象的节点值。如果 XML 对象是一个文本节点,则 nodeType 为 3,nodeValue 是节点的文本。如果 XML 对象是一个 XML 元素(nodeType 为 1),则 nodeValue 为 null 且只读

在Python里试了一下,对普通的文本节点,如“<server>mail.</server>”,nodeValue是1,为了要显示其文本内容,用.data属性和用.nodeValue属性是效果一样的,如:
            rc = ""
            for node in node.childNodes:
                if node.nodeType in ( node.TEXT_NODE, node.CDATA_SECTION_NODE):
                    rc = rc + node.nodeValue
                print rc

由于windows系统对于xml文件的默认格式是GB2312,而python对xml的格式要求是utf-8和utf-16,可是python的默认字体格式是ascii,因此,对于包含中文的xml文件,为了正确读取它,就得分两步完成:

1.将xml文件保存为utf-8格式,并将encoding改为utf-8,这样就可保证用IE打开xml文件的同时,python也可以打开此文件。
2.将python系统默认的字体编码模式改为gbk,这样就可以保证当python读取utf-8格式的xml文件时,将字体转化为gbk格式,python系统正确显示字体了。
3.将XML文件的字符串转化为gbk格式的str,系统就能使用该字符串进行各种操作了!
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值