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

版权声明:本文为博主原创文章,未经博主允许不得转载。 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

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

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

猜你喜欢

转载自blog.csdn.net/xiaobai_ol/article/details/52446780