python读取xml配置文件实例

发布时间:2020-03-06编辑:脚本学堂
本文介绍了python读取xml文件的一个例子,python读取xml配置文件的方法,有需要的朋友参考下。

有如下的xml配置文件,名字为config.xml:
 

复制代码 代码示例:
<?xml version="1.0"?>
<config>
    <server>server1</server>
    <server>server2</server>
    <account>account</account>
    <pwd>pwd</pwd>
</config>

python代码 解析xml配置文件:
 

复制代码 代码示例:

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:(脚本学堂 www.jb200.com
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