2017-06-11 44 views
0

我正在使用下面的代碼從代碼下面的XML數據中提取一個數字。出於某種原因,我的列表變爲空白。對不起,如果代碼有點混亂。這是一項正在進行的工作,我正在嘗試使用某些打印功能來嘗試獲得結果。正如我做得到「檢索,LEN(XMLDATA), '人物',我相信問題在於某處在這裏:解析XML會出現一個空列表(Python)

pydata = ET.fromstring(xmldata) 

如果我打印

print (pydata) 

我只得到這樣的:

<Element 'commentinfo' at 0x00000075968A7BD8> 

我想我失去了一些東西相當小,但我不是想出來的。

# Note - I am using Python 3.6 
# exec(open("./trial.py").read()) 
# http://python-data.dr-chuck.net/comments_263475.xml 

import xml.etree.ElementTree as ET 
import urllib.request 
sumcount = 0 

while True: 
    url = input('Enter url:') 
    url = 'http://python-data.dr-chuck.net/comments_263475.xml' 
    if len(url) < 1 : break 
    print ('Retrieving', url) 
    uh = urllib.request.urlopen(url) 
    xmldata = uh.read() 
    print ('Retrieved',len(xmldata),'characters') 
    pydata = ET.fromstring(xmldata) 
    print('Name:', pydata.find('name')) 
    print('Attr:', pydata.find('comment')) 
    lst = pydata.findall('comment') 
    print (lst) 
    print('Count:', len(lst)) 
    if True : break 

這是XML:

#<comment> 
# <name>Matthias</name> 
# <count>97</count> 
#</comment> 

任何幫助將是非常歡迎!

+0

你爲什麼要求url然後立即寫上它? –

+0

因爲我不想在測試時連續添加它。我最終會刪除覆蓋。 –

+0

實際的'xml'數據結構與問題中給出的示例不同。您可以使用['XPath expression'](https://docs.python.org/2/library/xml.etree.elementtree.html#xpath-support)搜索'comment'節點,例如'lst = pydata.findall('./ comments/comment')'。 – putu

回答

0

您應該仔細閱讀文檔。

Element.findall() finds only elements with a tag which are direct children of the current element 

如果鍵入pydata它會回報你這樣的:

>><Element 'comment' at 0x10411c090> 

元素的無根元素有標籤comment下,這是很容易這樣做驗證:

for child in pydata: 
    print child.tag 

>> name 
    count 

同樣看起來你並不像打印元素的實際文本值,所以改變這些行:

print('Name:', pydata.find('name')) 
print('Attr:', pydata.find('comment')) 

要這樣:

print('Name:', pydata.find('name').text) 
print('Attr:', pydata.find('comment').text) 
+0

非常感謝您的回答!我不知道直接的孩子「限制」。第二部分我最初有,但我得到了關於它的錯誤消息,可能是因爲它沒有搜索我認爲正在搜索的內容。 –

+0

如果答案有助於您回答問題或回答您的問題,請接受,以便未來的觀衆也能看到。 –

+0

我該如何接受?我的選票似乎並沒有因爲我的聲望而被計算在內。 –

0

根據您的建議一點點的試錯後,我想出瞭解決方案。最終的代碼應該從XML代碼中提取數字並對其進行求和。如果您對如何改進我的代碼有任何建議,請讓我知道!

import xml.etree.ElementTree as ET 
import urllib.request 
sumcount = 0 

while True: 
    url = input('Enter url:') 
    url = 'http://python-data.dr-chuck.net/comments_263475.xml' 
    if len(url) < 1 : break 
    print ('Retrieving', url) 
    uh = urllib.request.urlopen(url) 
    xmldata = uh.read() 
    print ('Retrieved',len(xmldata),'characters') 
    pydata = ET.fromstring(xmldata) 
    for child in pydata: 
     print (child.tag) 
    lst = pydata.findall('./comments/comment') 
    for comment in lst: 
     scount = comment.find('count').text 
     intscount = int(scount) 
     sumcount = sumcount + intscount 
    print('Entries:', len(lst)) 
    print('Sum:', sumcount) 
    if True : break