2016-06-18 14 views
1

Dieser Code soll die Anzahl der Kommentare in diesem XML-Dokument zusammenfassen.Summe aller XML-Tag-Werte?

import urllib 
import xml.etree.ElementTree as ET 

url = 'http://python-data.dr-chuck.net/comments_42.xml' 

print 'Retrieving', url 
uh = urllib.urlopen(url) 
data = uh.read() 
print 'Retrieved',len(data),'characters' 
print data 
for line in data: 
    tree = ET.fromstring(data) 
    comments = tree.findall('comments') 

    name = comments[0].find('comment').find('name').text 
    count = comments[0].find('comment').find('count').text 
    count = int(count) 
    count = count + count 
print count 

Aber es zeigt nur die Anzahl der Kommentare auf der ersten comment Tag und dann fügt sie sich und bleibt dann stehen.

Hier ist der Ausgang. Die Oberseite ist das xml Dokument und an der Unterseite gibt es die Zählung (, die 97 + 97 ist, nur die Anmerkungen durch Romina), das falsch ist. Es sollte die Summe aller Kommentare in der Datei sein, nicht nur von Romina

Wie bekomme ich die Summe aller Kommentare in der Datei?

Retrieving http://python-data.dr-chuck.net/comments_42.xml 
Retrieved 4189 characters 
<?xml version="1.0" encoding="UTF-8"?> 
<commentinfo> 
    <note>This file contains the sample data for testing</note> 

    <comments> 
    <comment> 
     <name>Romina</name> 
     <count>97</count> 
    </comment> 
    <comment> 
     <name>Laurie</name> 
     <count>97</count> 
    </comment> 
    <comment> 
     <name>Bayli</name> 
     <count>90</count> 
    </comment> 
    <comment> 
     <name>Siyona</name> 
     <count>90</count> 
    </comment> 
    <comment> 
     <name>Taisha</name> 
     <count>88</count> 
    </comment> 
    <comment> 
     <name>Ameelia</name> 
     <count>87</count> 
    </comment> 
    <comment> 
     <name>Alanda</name> 
     <count>87</count> 
    </comment> 
    <comment> 
     <name>Prasheeta</name> 
     <count>80</count> 
    </comment> 
</commentinfo> 

194 
+0

auf Arbeiten einige meinen eigenen Code zu testen und am unteren Rande bemerkt, beenden Sie nicht Ihre Kommentare Tag vor commentinfo. – Hashman

Antwort

2

Beachten Sie die subtilen Änderungen. Weil <comments> mehrere <comment> Tags enthält, müssen wir zuerst alle von ihnen finden, nur dann können wir über sie iterieren und das <count> Tag finden.

import urllib 
import xml.etree.ElementTree as ET 

url = 'http://python-data.dr-chuck.net/comments_42.xml' 

uh = urllib.urlopen(url) 
data = uh.read() 

tree = ET.fromstring(data) 
comments = tree.find('comments').findall('comment') 
total_count = 0 
for comment in comments: 
    count = comment.find('count').text 
    count = int(count) 
    total_count += count 
print total_count 
>> 2553 
2

Ihre Schleifenlogik ist falsch. Statt

for line in data: 
    tree = ET.fromstring(data) 
    comments = tree.findall('comments') 


    name = comments[0].find('comment').find('name').text 
    count = comments[0].find('comment').find('count').text 
    count = int(count) 
    count = count + count 

Sie benötigen

tree = ET.fromstring(data) 
comments = tree.find('comments').findall('comment') 

count = 0 
for comment in comments: 
    name = comment.find('name').text 
    count += int(comment.find('count').text) 
Verwandte Themen