Je travaille sur un analyseur pour obtenir des données à partir d'un fichier XML. J'utilise libxml2 pour extraire des données. Je ne suis pas capable d'obtenir les attributs des nœuds. Je n'ai trouvé que nb_attributes code> pour obtenir le nombre d'attributs. P>
6 Réponses :
Essayez quelque chose comme:
xmlNodePtr node; // Some node NSMutableArray *attributes = [NSMutableArray array]; for(xmlAttrPtr attribute = node->properties; attribute != NULL; attribute = attribute->next){ xmlChar *content = xmlNodeListGetString(node->doc, attribute->children, YES); [attributes addObject:[NSString stringWithUTF8String:content]]; xmlFree(content); }
Salut mat. J'ai trouvé votre code utile pour trouver les valeurs de l'attribut. Mais cela donne la valeur pour seul le premier nœud. Comment obtenir des valeurs pour les nœuds suivants également. ??.. Merci d'avance.
Ne devrait pas nœud-enfants code> devenir
attribut-> enfants code>?
Oui, cela devrait également voir @matthew Lowe, il a remarqué l'erreur plus tôt. J'ai mis à jour la réponse (2,5 ans plus tard;))
Je pense que Joostk signifiait attribut-> enfants, donnant quelque chose comme ceci: Voir si cela fonctionne pour vous. p> p>
Salut mat. J'ai trouvé votre code utile pour trouver les valeurs de l'attribut. Mais cela donne la valeur pour seul le premier nœud. Comment obtenir des valeurs pour les nœuds suivants également. ??.. Merci d'avance.
Vous pouvez itérer sur des nœuds de la même manière que vous ithétéral sur les attributs: nœud = nœud-> Suivant.
Je pense que j'ai trouvé pourquoi vous n'avez que 1 attribut (au moins cela m'est arrivé).
Le problème était que je lisais des attributs pour le premier nœud, mais suivant est un nœud texte. Je ne sais pas pourquoi, mais nœud-> Propriétés me donne une référence à une partie non lisible de la mémoire, donc il s'est écrasé. P>
Ma solution consistait à vérifier le type de nœud (élément est 1) P >
J'utilise un lecteur, donc: p> Le code entier Vous pouvez l'obtenir de http://www.xmlsoft.org/examples/reader1.c.c et ajoutez ceci p> à la ligne 50. p> p>
Si vous utilisez la méthode SAX StartElementns (...), cette fonction est ce que vous recherchez: utilisation: p>
Le moyen le plus simple que j'ai trouvé à l'aide de libxml2 (via LibxML ++ en C ++) consistait à utiliser les méthodes Par exemple: p> eval_to_xxx code>. Ils évaluent une expression XPath, vous devez donc utiliser la syntaxe
@property code>.
std::string get_property(xmlpp::Node *const &node) {
return node->eval_to_string("@property")
}
La voie la plus efficace et directe avec libxml ++ est retour std :: string (dynamic_cast
noeud code> comme référence à un pointeur de const à non-const
xmlpp :: noeud code>. Plus utile serait:
const xmlpp :: nœud * noeud code>