2011-10-19 14 views
2

このXMLブロックを素早く取得し、「バージョン」の値を抽出する方法はありますか?パスからXML要素を簡単に取得する方法はありますか?

<xml> 
    <creator version='1.0'> 
    <program>BULK_EXTRACTOR</program> 
    <version>1.0.3</version> 
    <build_environment> 
     <compiler>GCC 4.2</compiler> 
     <compilation_date>2011-09-27T11:56:35</compilation_date> 
     <library name="afflib" version="3.6.12"></library> 
     <library name="libewf" version="20100226"></library> 
    </build_environment> 
    </creator> 
    </xml> 

私は、Pythonの美しいスープでこれを行うことができることを知って、私はDOMでそれを行うための簡単な方法について見てよ。

ありがとうございます! lxmlを使用して 、バージョン属性、バージョン要素のためではありません探していると仮定すると、

+1

あなたはどちらのバージョンを参照していますか? –

答えて

2

をあなたはlxmlのを持っていない場合がインストールされている場合は、標準ライブラリに含まれるElementTreeを使用できます。

>>> import xml.etree.ElementTree 
>>> doc = xml.etree.ElementTree.fromstring(content) 
>>> doc.findtext('creator/version') 
'1.0.3' 
+0

これは本当に簡単です。 – vy32

4

import lxml.etree as ET 

content='''\ 
    <xml> 
    <creator version='1.0'> 
    <program>BULK_EXTRACTOR</program> 
    <version>1.0.3</version> 
    <build_environment> 
     <compiler>GCC 4.2</compiler> 
     <compilation_date>2011-09-27T11:56:35</compilation_date> 
     <library name="afflib" version="3.6.12"></library> 
     <library name="libewf" version="20100226"></library> 
    </build_environment> 
    </creator> 
    </xml> 
''' 

doc=ET.fromstring(content) 
version=doc.xpath('creator/version/text()')[0] 
print(version) 
# 1.0.3 

をバージョンを確認するには、属性:

for elt in doc.xpath('//*[@version]'): 
    print(elt.tag, elt.attrib.get('name'), elt.attrib.get('version')) 
# ('creator', None, '1.0') 
# ('library', 'afflib', '3.6.12') 
# ('library', 'libewf', '20100226') 
関連する問題