一、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调取路径的内容写到公共部分,就可以解决该问题