2013-08-26 4 views
0

Есть ли способ подсчитать все вхождения идентификатора определенного типа в несколько xml-файлов? Вот пример, что я имею в виду. Все XML-файлы имеют следующую структуру:Количество вхождений в нескольких xml-файлах

<data> 
    <geo> 
    <g type="mount" stid="s727" level="geo"/> 
    <g type="bike" stid="g12" level="geo"/> 
    <g type="lake" stid="g12432" level="geo"/> 
    <g type="mount" stid="s0" level="geo"/> 
    </geo> 
</data> 

То, что я хотел бы рассчитывать на число вхождений «s0», «s» + любое количество, «s12» для каждого типа и те же 3 категории для g. Может кто-нибудь покажет мне, как это будет работать? Конечно, это будет иметь пример только по категории - для меня важно то, как вы сохраняете промежуточные результаты и как вы будете выполнять основную функцию (я полагаю, вы сделаете это с помощью sys.arg - по крайней мере , это то, что я бы сделал ...)

Спасибо за любую помощь.

+0

Вы можете [взглянуть на LXML] (http://lxml.de/), чтобы проанализировать XML-файл –

ответ

0

Мне нравится использовать библиотеку LXML для этого типа вещей. Это очень хорошо документировано. Вот небольшой сценарий, который я написал, который, как я думаю, вам нужен. Если вас интересует только счет, а не элементы, вы можете увеличить значение вместо добавления в список. Кроме того, это только получает атрибуты, которые содержат s, но могут быть легко изменены для получения значений, начинающихся с s, если это то, что вы собираетесь делать.

from lxml import etree 
from StringIO import StringIO 

parser = etree.XMLParser() 
FileInstance = open('help1.xml', 'r') 
tree = etree.parse(StringIO(FileInstance.read()), parser) 
FileInstance.close() 

output = [] 

for i in tree.xpath('//geo'): 
    for element in i: 
     if "s" in element.attrib['stid']: 
      output.append(element.attrib['stid']) 

print output 
print len(output) 
Смежные вопросы