2013-02-15 3 views
2

Мой XML-файл test.xml содержит следующие тегиПодсчет количества XML-тегов в Python с использованием xml.dom.minidom

<?xml version="1.0" encoding="ISO-8859-1"?> 
<AppName> 
    <author>Subho Halder</author> 
    <description> Description</description> 
    <date>2012-11-06</date> 
     <out>Output 1</out> 
     <out>Output 2</out> 
     <out>Output 3</out> 
</AppName> 

Я хочу, чтобы подсчитать количество раз <out> тег происходивших

Это мой код python до сих пор, который я написал:

from xml.dom.minidom import parseString 
file = open('test.xml','r') 
data = file.read() 
file.close() 
dom = parseString(data) 
if (len(dom.getElementsByTagName('author'))!=0): 
    xmlTag = dom.getElementsByTagName('author')[0].toxml() 
    author = xmlTag.replace('<author>','').replace('</author>','') 
    print author 

Может кто-нибудь помочь мне здесь?

+1

Это просто не '' LEN (dom.getElementsByTagName ('из')) '' вы не упоминают о '' out'' в коде только '' author'' – sotapme

+0

аааа, я просто новичок! Спасибо за ответ. –

+0

Просто прочитайте, что такое '' dom.getElementsByTagName ('out') '' делает – sotapme

ответ

1

Я бы рекомендовал использовать LXML

import lxml.etree 
doc = lxml.etree.parse(test.xml) 
count = doc.xpath('count(//out)') 

Вы можете посмотреть более подробную информацию о XPATH here.

+0

lxml требует зависимости, которую нужно установить, она не работает из коробки! –

+0

@SunnyRockzzs быстро и лучше для вас использовать его в долгосрочной перспективе, особенно если все усложняется. Предполагая, что вы используете Ubuntu, 'apt-get install libxml2-dev libxslt-dev' должен устанавливать зависимости. – myusuf3

+0

Я должен сказать, что '' lxml'' отлично, и я дал выбор, который я предлагал бы каждый раз, но OP использовал '' xml.dom.minidom''. – sotapme

1

Если вы хотите, вы также можете использовать ElementTree. С помощью приведенной ниже функции вы получите словарь с именами тегов в качестве ключа и количество раз, когда этот тег встречается в вашем XML-файле.

import xml.etree.ElementTree as ET 
from collections import Counter 

def count_tags(filename): 
     my_tags = [] 
     for event, element in ET.iterparse(filename): 
      my_tags.append(element.tag) 
     my_keys = Counter(my_tags).keys() 
     my_values = Counter(my_tags).values() 
     my_dict = dict(zip(my_keys, my_values)) 
     return my_dict