Python学习篇之-解析XML

一、XML格式及使用

<?xml version="1.0" encoding="utf-8"?>    /*指明该XML的版本、编码方式,在XML文档的处理中都是使用UTF-8编码进行的,因此,如果你不写明encoding的话,都是认为文件是UTF-8编码的*/
<catalog>
    <maxid>4</maxid>
    <item id="1">
        <caption>Python</caption>
        <item id="4">
            <caption>测试</caption>
        </item>
    </item>
    <item id="2">
        <caption>Zope</caption>
    </item>
</catalog>


XML信息体是由树状元素组成。每个XML文档都有一个文档元素,也就是树的根元素,所有其它的元素和内容都包含在根元素中。


二、Python处理XML的方法

Python中有三种方式处理xml。这里选择的是xml.dom.*

文件对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展置标语言的标准编程接口。一个 DOM 的解析器在解析一个XML文档时,一次性读取整个文档,把文档中所有元素保存在内存中的一个树结构里,之后你可以利用DOM 提供的不同的函数来读取或修改文档的内容和结构,也可以把修改过的内容写入xml文件。python中用xml.dom.minidom来解析xml文件

①读取

# 获取路径
path_file = os.path.abspath(os.path.abspath('..'))
logging.config.fileConfig("../Config/logger.config")
def number(location):
    """
    :param location:
    :return:
    """
    dom = xml.dom.minidom.parse(path_file + '/Config/numberinfo.xml')
    root = dom.documentElement
    value = root.getElementsByTagName('valueNum')[location].getAttribute('id')
    logging.info(u'获得的属性值为: %s' % value)
    return value

②写入

读取xml中的id,并id进行+2处理,然后存入xml

# 获取路径
path_file = os.path.abspath(os.path.abspath('..'))
logging.config.fileConfig("../Config/logger.config")
def usernameChange(location):
    """
       :param location:
       :return:
       """

    dom = xml.dom.minidom.parse(path_file + '/Config/numberInfo.xml')
    root = dom.documentElement
    value = root.getElementsByTagName('valueNum')[location].getAttribute('id')
    domAttr = root.getElementsByTagName('valueNum')[location]

    Num = Numlist(value)
    # logging.info(u'获得的属性值为: %s' % Num)

    domAttr.setAttribute('id', Num)
    logging.info(u'修改id获得的属性值为: %s' % domAttr.getAttribute('id'))
    f = file(path_file + '/Config/LoginInfo.xml', 'w')
    writer = codecs.lookup('utf-8')[3](f)
    dom.writexml(writer, encoding='utf-8')
    
    return Num

三、遇到的问题

   中间处理xml数据写入时,遇到处理后的数据无法写入的情况,后经排查后,是因为xml调取路径是写入到方法内部了。因此每次调取方法都重新重置了xml。从而导致无法写入。

把xml调取路径的内容写到公共部分,就可以解决该问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值