最近刚开始学习Python,要实现这一样一个函数,遍历一个Android app代码中res\\value目录下的xml文件。因为其xml文件格式基本为下面这种,比较单一。

string.xml

ActivityLife

Hello world!

Settings

可以看到,其实在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 处理中一个普遍的错误是,认为元素节点包含文本。

不过,元素节点的文本是存储在文本节点中的。

在这个例子中:2005,元素节点 ,拥有一个值为 "2005" 的文本节点。

"2005" 不是 元素的值!

具体原因希望读者能告诉我哈!!☆⌒(*^-゜)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

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐