2016-05-17 2 views
3

Ich benutze Python 3.4 auf einem Windows 64-Bit-Rechner.Gibt es eine Möglichkeit, die Anzahl der Elemente eines bestimmten Namens in einer XML-Datei mit Python zu zählen?

Ich habe derzeit eine XML-Datei, die mehrere Hierarchien hat. Es gibt eine Reihe von Elementen, die in der XML-Struktur den Namen "paragraph" haben. Aber sie könnten auf verschiedenen Hierarchien sein.

Gibt es eine Möglichkeit, die Anzahl dieser Elemente auf einfache Weise zu zählen? Traversal durch den ganzen Baum scheint viel zu zeitaufwendig.

+0

Sie müssen den gesamten Baum zweimal durchqueren: einmal, um es zu analysieren, und einen weiteren, um jedes Absatz-Tag zu zählen. Ich glaube, dass die "count" -Lösungen den Baum noch einmal durchlaufen werden. Sie können den Baum möglicherweise nur einmal durchqueren, wenn Sie die Tags beim Analysieren des Baums integrieren, aber das wäre eine Menge Arbeit. –

Antwort

2

Lesen Sie die XML-Datei und den Inhalt in XmlString. Wenn alles, was Sie benötigen die Anzahl der Vorkommen des Wortes „Absatz“ ist, können Sie etwas tun -

xmlString.count("<paragraph>") 

Diese mehrere Annahmen über macht, wie Sie Ihre XML-Datei aussieht und ist möglicherweise nicht in allen Fällen.

4

Wenn Sie lxml.etree verwenden würden, dann würden Sie eine vollständige XPath-Unterstützung haben und count() verwenden können:

import lxml.etree as ET 

tree = ET.parse(xml) 
paragraphs = tree.xpath('count(//p)') 
print(paragraphs) 

In xml.etree.ElementTree würden Sie es in Python zu tun haben, über findall() und len() wegen der limited XPath support:

import xml.etree.ElementTree as ET 

tree = ET.parse(xml) 
paragraphs = tree.findall('//p') 
print(len(paragraphs)) 
+0

Was bedeutet "zählen (// p)"? –

+0

@joewong 'count()' ist eine XPath-Funktion (ich habe einen Link hinzugefügt), '// p' würde alle' p' Elemente im Dokument rekursiv finden. – alecxe

1

ich habe jetzt eine leicht approch zu tun, um die Arbeit mit xml.dom.minidom gefunden:

+0

Warte auf diesen Gedanken, fahre mit dem Minidom für eine Weile mit dem Analysieren von xml fort, dann komm zurück und sag mir, dass die Dinge immer noch einfach sind :) – alecxe

+0

@alecxe Alles, was ich sagen will, ist, dass es für mich funktioniert. –