Je suis nouveau à Python et j'ai une période particulièrement difficile à travailler avec XML et Python. La situation que j'ai est ceci, j'essaie de compter le nombre de fois qu'un mot apparaît dans un document XML. Assez simple, mais le document XML est une réponse d'un serveur. Est-il possible de le faire sans écrire dans un fichier? Il serait formidable d'essayer de le faire de la mémoire.
Voici un exemple de code XML: p> voici ce que j'ai dans python p> passé ce point J'ai essayé d'utiliser Stringio, Elementtree et Minidom sans succès et je suis arrivé à un point où je ne suis pas sûr de quoi faire d'autre. P> aider serait grandement apprécié p> p>
4 Réponses :
Est-ce que cela aide ...
from xml.etree.ElementTree import XML txt = """<xml> <title>Info</title> <foo>aldfj</foo> <data>Text I want to count</data> </xml>""" # this will give us the contents of the data tag. data = XML(txt).find("data").text # ... so here we could do whatever we want print data
Non, il ne reçoit qu'un texte spécifique, pas tous les nœuds de texte.
Je ne fais pas tous ses devoirs ... à partir de là, il peut trouver pour utiliser Findall lui-même ...
Si vous essayez simplement de compter le nombre de fois qu'un mot apparaît dans un document XML, il suffit de lire le document comme une chaîne et de compter:
from xml.etree import cElementTree as ET xml = ET.fromstring(urllib2.urlopen('http://www.example.com/file.xml').read()) for data in xml.getiterator('data'): # do something with data.text
C'est clair de la question qu'il veut ne compter que des mots dans une balise particulière. Vous ne pouvez pas également être sûr que le mot n'est pas réellement utilisé comme étiquette elle-même, cette approche est donc clairement fausse
Bien que cela fonctionne pour certains mots, il échoue en présence d'entités XML.
wow je devrais avoir celui-ci. Je pourrais éventuellement utiliser cela étant la réponse XML n'est pas de répétitif
Geez, beaucoup de haïrons aujourd'hui. L'OP affirme qu'il "tente de compter le nombre de fois qu'un mot apparaît dans un document XML". J'ai changé la chaîne de comptage pour ne pas être identique à l'exemple de la balise qu'il a donnée.
@Derekspringer ne déteste pas ... mais en utilisant un décompte simple () sur un document XML est clairement dangereux et enclin à vous donner de mauvaises réponses ... et vous ne saurez pas quand ils sont faux ... D'où le commentaire emphatique
C'est assez simple, autant que je puisse dire: afin de compter les occurrences d'une chaîne, essayez ceci (un peu condensé, mais j'aime des doublures): < / p>
Il suffit de remplacer la chaîne 'Compte' avec le mot que vous voulez compter. Si vous souhaitez compter des phrases, vous devrez adapter ce code car il s'agit pour le comptage de mots. Mais de toute façon, la réponse à la procédure à suivre à tout le texte intégré est XML ('
from xml.etree.ElementTree import XML
from re import findall
txt = """<xml>
<title>Info</title>
<foo>aldfj</foo>
<data>Text I want to count</data>
</xml>"""
sum([len(filter(lambda w: w == 'count', findall('\w+', t))) for t in XML(txt).itertext()])