版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xiaobai_ol/article/details/52446780
最近刚开始学习Python,要实现这一样一个函数,遍历一个Android app代码中res\\value目录下的xml文件。因为其xml文件格式基本为下面这种,比较单一。
string.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">ActivityLife</string>
<string name="hello_world">Hello world!</string>
<string name="action_settings">Settings</string>
</resources>
可以看到,其实在resources父节点下有三个string子节点。因刚开始学Python,所以我觉得用xml.dom方法比较容易懂一些(原谅我还是个小白)。
xml dom定义了xml元素的对象和属性,以及访问他们的方法。dom将xml文档作为一个树形结构来处理。具体介绍可以查看这个,点击打开链接。好了,回归正题,要解决上面的问题,具体思路是:
1.遍历文件夹,得到所有的xml文件。(使用了glob.glob())
2.对每个xml进行读取解析。得出子节点属性值和文本节点值。
下面是实现代码:
# -*- coding: UTF-8 -*-
#遍历某个文件夹下所有xml文件
import sys
import glob
import os
import xml.dom.minidom
def traversalDir_XMLFile(path):
#判断路径是否存在
if (os.path.exists(path)):
#得到该文件夹路径下下的所有xml文件路径
f = glob.glob(path + '\\*.xml' )
for file in f :
print file
#打开xml文档
dom = xml.dom.minidom.parse(file)
#得到文档元素对象
root = dom.documentElement
#得到子节点列表,print childs
childs = root.childNodes
for child in childs:
#筛选符合需求的child
if(child.nodeType == 1):
#得出子节点属性和文本节点值
print'key:', child.getAttribute('name')
print'value:',child.firstChild.data
traversalDir_XMLFile('E:\\work\\ActivityLife\\res\\values')
path路径是我的一个value文件夹,里面有dimens.xml;string.xml;styles.xml;还有几个word文件和txt格式文件。输出结果为:
E:\work\ActivityLife\res\values\dimens.xml
key: activity_horizontal_margin
value: 16dp
key: activity_vertical_margin
value: 16dp
E:\work\ActivityLife\res\values\strings.xml
key: app_name
value: ActivityLife
key: hello_world
value: Hello world!
key: action_settings
value: Settings
E:\work\ActivityLife\res\values\styles.xml
key: AppBaseTheme
value:
key: AppTheme
value:
代码中注释已经非常明了了。因为我的文件中还有其他的xml文件,虽然其父节点都是在resources下,但是其子节点却不相同。有string的,有dimen等。但其格式却都是相同的。而我在print value时,用child.nodeValue却得到none,额现在还不是很清楚这个原因。我想可能是下面这个:
文本总是存储在文本节点中
在 DOM 处理中一个普遍的错误是,认为元素节点包含文本。
不过,元素节点的文本是存储在文本节点中的。
在这个例子中:<year>2005</year>,元素节点 <year>,拥有一个值为 "2005" 的文本节点。
"2005" 不是 <year> 元素的值!
具体原因希望读者能告诉我哈!!☆⌒(*^-゜)v
下面给出一些参考文档:
Python golb方法:http://www.cnblogs.com/hongten/p/hongten_python_glob.html