2016-07-27 4 views
0

私はxmlを解析し、dir_pathの値を得ようとしていますが、希望の出力を得ることはできません。ルートの下に直接xml要素の値を取得する方法

input.xmlに

<?xml version="1.0" ?> 
    <data> 
    <software> 
     <name>xyz</name> 
     <role>xyz</role> 
     <future>unknown</future> 
    </software> 
    <software> 
     <name>abc</name> 
     <role>abc</role> 
     <future>clear</future> 
     <dir_path cmm_root_path_var="COMP_softwareROOT">\\location\software\INR\</dir_path> 
     <loadit reduced="true"> 
     <RW>yes</RW> 
     <readonly>R/</readonly> 
     </loadit> 
     <upload reduced="true"> 
     </upload> 
    </software> 
    <software> 
     <name>def</name> 
     <role>def</role> 
     <future>clear</future> 
     <dir_path cmm_root_path_var="COMP2_softwareROOT">\\location1\software\INR\</dir_path> 
     <loadit reduced="true"> 
     <RW>yes</RW> 
     <readonly>R/</readonly> 
     </loadit> 
     <upload reduced="true"> 
     </upload> 
    </software> 
    </data> 

CODE: -

tree = ET.parse(input.xml) 
root = tree.getroot() 
dir_path = root.find(".//dir_path") 
print dir_path.text 

OUTPUT: -

.\ 

予想される出力: -

\\location\software\INR\ 
+0

これは実際に私のためだけで正常に動作.. '何を返すdir_path.attrib'ん? – Aaron

+0

一つのポイントを追加するのを忘れました.Dir_path.attribを 'abc'という名前で取得する必要があります。複数のdir_pathが異なる名前であり、input.xmlが更新されました。 – kemosabee

答えて

1

次のことを試してみてください。

from xml.etree import ElementTree as ET 

tree = ET.parse('filename.xml') 

item = tree.find('software/[name="abc"]/dir_path') 
print(item.text if item is not None else None) 
+0

二重フロントスラッシュ' // 'が必要です。 'NoneType 'オブジェクトに属性' text''がありません。これは' NoneType'の場合です。 – kemosabee

+0

'//'は必要ありません。実際には、直接の子であるため、 '.'や'/'がなくても情報を得ることができます。もし 'software'の中に' name'子がなければ、それをテストすることができます(変更されたxpathsを参照してください)が、 'dir_path'を持っていなければ' .text ' – chapelo

+0

より洗練されたXPath式を使用する簡略化されたバージョンを参照してください。 – chapelo

関連する問題