2011-10-19 12 views
0

Etreeモジュールを使用してXMLファイルを読み込んでいます。次のコードを使用して<page><title>タグの値を印刷します。私のコードは正常に動作します。しかし、私はほとんど変化したくありません。 <page id='...'>属性IDが存在する場合は、tagの値を出力します。出来ますか?おかげXMLファイルの構文解析モジュール

import xml.etree.cElementTree as etree 
from pprint import pprint 
tree = etree.parse('find_title.xml') 
for value in tree.getiterator(tag='title'): 
    print value.text 
for value in tree.getiterator(tag='page'): 
    pprint(value.attrib) 

は、ここに私のXMLファイルです。

<mediawiki> 
     <siteinfo> 
     <sitename>Wiki</sitename> 
     <namespaces> 
      <namespace key="-2" case="first-letter">Media</namespace> 
     </namespaces> 
     </siteinfo> 
    <page id="31239628" orglength="6822" newlength="4524" stub="0" categories="0" outlinks="1" urls="10"> 
    <title>Title</title> 
    <categories></categories> 
    <links>15099779</links> 
    <urls> 
    </urls> 
    <text> 

    Books 

    </text> 
    </page> 

    </mediawiki> 

答えて

1
for el in tree.getiterator(tag='page'): 
    page_id = el.get('id', None) # returns second arg if id not exists 
    if page_id: 
     print page_id, el.find('title').text 
    else: 
     pprint(el.attrib) 

編集:はcommmentのため更新: "おかげで、私は同時にpage_idのタイトルを印刷することができることを意味31239628 - タイトル?"

+0

私は 'page_id'と' title'を同時に印刷できますか?手段 '31239628 - タイトル' –

1

element.get()メソッドが使用されていますタグのオプション属性値を取得するには:

>>> page_id = tree.find('page').get('id') 
>>> if page_id: 
     print page_id 

31239628