2
J'utilise libxml2 et C++. La fonction suivante se bloque ici à return (char*)cur->content;
. Quand je le change en return (char*)cur->name;
alors il renverra attribute
qui est le nom de l'étiquette. Ce que je veux est 1, 2 et 3 (basé sur le fichier XML ci-dessous le code C++). Qu'est-ce que je fais mal?Comment obtenir le contenu avec libxml2?
char* xml2sdf::getId(xmlNode* part){
xmlNode* cur = part->xmlChildrenNode;
// get the id
while (cur != NULL) {
if (!xmlStrcmp(cur->name, (const xmlChar *)"attribute")) {
xmlAttrPtr attr = cur->properties;
if(!xmlStrcmp(attr->children->content, (const xmlChar*)"id")){
return (char*)cur->content;
}
}
cur = cur->next;
}
}
}
La partie du fichier XML, il est l'analyse:
<part ref="part10" name="part10">
<attribute name="face">7</attribute>
<attribute name="id">1</attribute>
</part>
<part ref="part20" name="part20">
<attribute name="face">5</attribute>
<attribute name="id">2</attribute>
</part>
<part ref="part30" name="part30">
<attribute name="face">9</attribute>
<attribute name="id">3</attribute>
</part>
Le contenu d'un noeud est un enfant de ce noeud, c'est pourquoi vous devez d'abord accéder aux enfants. Vous pouvez également envisager d'utiliser la fonction xmlNodeGetContent au lieu d'accéder directement à la structure. C'est-à-dire, "return (char *) xmlNodeGetContent (cur-> children);". – Ishmael