2017-06-11 11 views
0

私は以下のコードを使用して、コードの下のXMLデータから数値を抽出しています。何らかの理由で私のリストは空になります。コードがちょっと混乱している場合は申し訳ありません。進行中の作業で、結果を得るためにいくつかの印刷機能を試していました。私は「のRetrieved、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式 '(https://docs.python.org/2/library/xml.etree.elementtree.html#xpath-support)を使用して、コメントノードを検索することができます。 '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

ありがとうございました!私は、直接的な子供の "制限"については知らなかった。私が最初に持っていた2番目の部分は、おそらくそれは私が探していると思ったものを検索していなかったので、それについてのエラーメッセージが表示されます。 –

+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 
関連する問題