python dom方法遍歷某文件夾下所有xml

最近剛開始學習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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章