python domメソッドフォルダの下のすべてのxmlを巡回

2784 ワード

最近Pythonの勉強を始めたばかりで、このような関数を実現するには、Android appコードのres\valueディレクトリのxmlファイルを巡ります.xmlファイルのフォーマットは基本的に以下のようなので、比較的単一です.
string.xml



    ActivityLife
    Hello world!
    Settings



実際にresources親ノードの下にstringサブノードが3つあることがわかります.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」は要素の値ではありません!
具体的な原因は読者に教えてほしいですね!!☆⌒(*^-゜)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