My XML String est -
$xml = simplexml_load_string($data); $status = $xml->SMSError;
4 Réponses :
Vous pouvez créer un dictionnaire et obtenir directement des valeurs ...
tree = ET.fromstring(xmlData) root = {} for child in tree: root[child.tag.split("}")[1]] = child.text print root["Queued"]
Salut, vois mon édition. "//Child.tag pour la balise annulée est - { exemple.com } annulé", il est donc difficile de le faire correspondre avec "annulé". Y a-t-il une meilleure façon?
Hey. Cela fonctionne, mais ce n'est qu'un ajustement. Comment accéder au texte des balises d'une manière où la balise est une clé et un texte est la valeur.
Aussi, vous voudrez peut-être changer le retour null code> à
renvoyer aucun code> ou
retour '' code>. Parce que avec NULL, il dit -
NameError: Nom global 'null' n'est pas défini code>
Ceci peut-être une solution alternative aussi. +1
Réponse mise à jour avec un niquet.
Votre document a un espace de noms à ce sujet, vous devez inclure l'espace de noms lors de la recherche: sortie: p> nsmap = {'n': 'http://example.com'}
print root.find('n:Sent', namespaces=nsmap)
print root.find('n:MessageID', namespaces=nsmap)
Donc, fondamentalement, je vais devoir spécifier "{ exemple.com }" Chaque fois que je veux accéder au texte d'une étiquette ?
@Hussaintamboli: Il existe également un noms = mappage code> argument sur
Rechercher code> et
retranchez code> mais qui semble être inutile lorsqu'il existe un espace de nom par défaut.
lxml code> gère tout cela beaucoup mieux.
Voir la réponse de @ Eclaird. Je pense que vous essayiez de faire la même chose. +1
Il imprime toujours aucun code> avec nsmap. Je pense qu'il y a quelque chose qui ne va pas avec Nsmap.
@Hussainttamboli: Je reçois la sortie de votre exemple XML. Assurez-vous d'orthographier le nom de la balise correctement ( MessageId code> et non
MessageId code>).
J'utilisais xml.etree.elementtree code> à partir de lien . Je pense que vous utilisez -
lxml.etree code> comme @ @ @root utilise.
@Hussaintamboli: Non, j'utilise xml.etree code>, python 2.7.
LXML CODE> prend en charge la même API (bien que certaines améliorations, mais c'est la même dans les deux).
@Hussainttamboli - Le code de Martijn est correct, vous devez avoir commis une erreur quelque part. J'ai écrit le code complet, cela me donne un résultat, essayez de la copier-coller et de voir si cela fonctionne.
Bonjour, root.find ('n: envoyé', espaces de noms = nsmap) code> imprime l'objet. Ajouter
.text code>.
Si vous êtes prêt sur Python Standard XML Bibliothèques, vous pouvez utiliser quelque chose comme ceci:
root = ET.fromstring(xmlData) namespace = 'http://example.com' def query(tree, nodename): return tree.find('{{{ex}}}{nodename}'.format(ex=namespace, nodename=nodename)) queued = query(root, 'Queued') print queued.text
avec avec lxml.etree code>:
Elementtree code> Vous pouvez faire: p>
import xml.etree.ElementTree as ET
root=ET.fromstring(xmlData)
ns={'n':'http://example.com'}
root.find('n:Queued',namespaces=ns).text
Out[13]: 'false'
Merci. Je me demandais de trouver quelque chose de similaire à Elementtree. +1