2017-06-22 159 views
0

假設我有這樣的XML文件:獲得屬性

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

我想要的東西,是在RSS其特定的屬性權重打印每篇文章的ID爲整個文檔(如這個)。

id=11234 
weight= 0.32 


id=63563 
weight= 0.86 
. 
. 
. 

我用這個代碼,這樣做,

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') 

    for weight in tree.xpath("//article[@id={}]/feed/type/@weight".format(article_id)): 
     print(article_id,weight) 

,並沒有工作,可能有人幫助我?

+0

1)請複製粘貼,絕對不要輸入您的示例程序,並將數據輸入到您的問題中。你的「錯別字」是實質性的,並改變了你的問題的性質。 2)請包含一個簡短的**完整** XML輸入以進行測試。當我更正無效的XML時,測試代碼會產生您的預期結果。請參閱[mcve]瞭解更多信息。 –

+0

另外,「它沒有工作」沒有幫助。準確地說,預期的結果是什麼?究竟什麼是實際結果? –

+0

對不起,這是一個誠實的錯誤。將不會再發生:) –

回答

0

如果你真的想這樣做,你可以在兩行

>>> from lxml import etree 
>>> tree = etree.parse('public.xml') 
>>> for item in tree.xpath('.//article[@id]//type[@weight]'): 
...  item.xpath('../..')[0].attrib['id'], item.attrib['weight'] 
... 
('11234', '0.32') 
('63563', '0.86') 

一個XML檢查我用堅持圍繞值雙引號weightetree在xml中聲明,直到我將第一行放入文件;我不知道爲什麼。

+0

嘿比爾,感謝您的回覆,並且您的代碼看起來不錯,但它對我不起作用,它卡在循環中,我不知道爲什麼。它有可能與我的XML文件有關?因爲你對另一個問題的幫助在同一個文件上工作得很好 –

+0

請你檢查一下你的文件是否可以在'net?它必須是xpath 1.0才能使用Python。 –

0

其中的一個,這可能爲你工作:

在這個版本中,請注意在通話中加入=tree.xpath()

from lxml import etree 
tree = etree.parse("news.xml") 


for article in tree.iter('article'): 
    article_id = article.attrib.get('id') 

    for weight in tree.xpath("//article[@id={}]/feed/type/@weight".format(article_id)): 
     print(article_id,weight) 

在這裏,請注意,我用article.xpath()取代tree.xpath()

from lxml import etree 
tree = etree.parse("news.xml") 

for article in tree.iter('article'): 
    article_id = article.attrib.get('id') 

    for weight in article.xpath("./feed/type/@weight"): 
     print(article_id,weight) 
+0

第一個,實際上這是一個錯字,我忘了把'='放在這裏,所以基本上第一個和我在這裏一樣。但對於第二個我跑它,並沒有奏效。我猜在表達式的邏輯中存在一個問題。 (它運行時沒有錯誤) –