2017-06-20 13 views
1

私は私が何をしたい、このようなものです。このxmlファイル(もちろんそのxmlファイルのごく一部)と文書番号lxmlのspeceific要素とサブ要素を再帰的に取得する方法は?

<article-set xmlns:ns0="http://casfwcewf.xsd" format-version="5"> 
<article> 
<article id="11234"> 
    <source> 
    <hostname>some hostname for 11234</hostname> 
    </source> 
    <feed> 
     <type>RSS</type> 
    </feed> 
    <uri>some uri for 11234</uri> 
</article> 
<article id="63563"> 
    <source> 
    <hostname>some hostname for 63563 </hostname> 
    </source> 
    <feed> 
     <type>RSS</type> 
    </feed> 
    <uri>some uri for 63563</uri> 
    </article> 
. 
. 
. 
</article></article-set> 

を持って、ために、その特定のホスト名とURIを持つ各文書番号を印刷しますドキュメント全体(このような)。

id=11234 
uri= some uri for 11234 
source=some hostname for 11234 

id=63563 
uri= some uri for 63563 
source=some hostname for 63563 
. 
. 
. 

私は

from lxml import etree 
tree = etree.parse("C:\\Users\\me\\Desktop\\public.xml") 

for article in tree.iter('article'): 

    article_id=article.attrib.get('id') 
    uri= tree.xpath("//article[@id]/uri/text()") 
    source= tree.xpath("//article[@id]/source/hostname/text()") 

    #i even used these two codes 
    #source=article.attrib.get('hostname') 
    #source = etree.SubElement(article, "hostname") 



    print('id={!s}'.format(article_id),"\n") 
    print('uri={!s}'.format(uri),"\n") 
    print('source={!s}'.format(source),"\n") 

、そうするように、このコードを使用し、それが動作しませんでした、誰かがこれで私を助けることができますか?

答えて

1

これは非常にうまくいくかもしれません。しかし、これは動作するように見えます。ちょうどコンテナ要素内の要素は<articles>(よりむしろ<article>)となるように

>>> for article in tree.iter('article'): 
...  article_id = article.attrib.get('id') 
...  uri = tree.xpath("//article[@id={}]/uri/text()".format(article_id)) 
...  source = tree.xpath("//article[@id={}]/source/hostname/text()".format(article_id)) 
...  article_id, uri, source 
...  
('11234', ['some uri for 11234'], ['some hostname for 11234']) 
('63563', ['some uri for 63563'], ['some hostname for 63563 ']) 

ところで私は、XMLを変更しました。このように:

<article-set xmlns:ns0="http://casfwcewf.xsd" format-version="5"> 
<articles> 
<article id="11234"> 
    <source> 
... 
+0

おかげ@Billベルそれは、あなたは非常に歓迎している –

+0

完璧に働きました。 –

+0

私はまた別の質問をします、あなたが答えることができれば、本当に感謝します。この例では、 'のような要素にも属性があり、id(各記事IDごとに)に対応するこの属性を取得したいとします。どうやってやるの? –

関連する問題