python dom方法遍历某文件夹下所有xml

来源:互联网 发布:软件项目管理制度 编辑:程序博客网 时间:2024/06/05 20:26

最近刚开始学习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 osimport  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.xmlkey: activity_horizontal_marginvalue: 16dpkey: activity_vertical_marginvalue: 16dpE:\work\ActivityLife\res\values\strings.xmlkey: app_namevalue: ActivityLifekey: hello_worldvalue: Hello world!key: action_settingsvalue: SettingsE:\work\ActivityLife\res\values\styles.xmlkey: AppBaseThemevalue:         key: AppThemevalue:         


代码中注释已经非常明了了。因为我的文件中还有其他的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

 xml解析:http://www.cnblogs.com/fnng/p/3581433.html

                   http://www.runoob.com/python/python-xml.html

0 0
原创粉丝点击