10
votes

En python - analysant une réponse XML et trouver une valeur de texte spécifique

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: xxx

voici ce que j'ai dans python Xxx

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.

aider serait grandement apprécié


0 commentaires

4 Réponses :


2
votes

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


2 commentaires

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 ...



5
votes

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


5 commentaires

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



5
votes

C'est assez simple, autant que je puisse dire: xxx

afin de compter les occurrences d'une chaîne, essayez ceci (un peu condensé, mais j'aime des doublures): < / p> xxx


0 commentaires

0
votes

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 (''). ITERTEXT () CODE>

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()])


0 commentaires