我是libxml的初学者,我遇到了一个奇怪的行为: 当我尝试访问xmlNode的内容时,应用程序将以静默方式退出。
我的代码:
// Initialisation des pointeurs
xmlDocPtr doc;
xmlXPathContextPtr xpath_context;
xmlXPathObjectPtr xpath_objects;
// Chargement du document et création du contexte pour xpath
doc = xmlParseFile(nom.c_str());
xpath_context = xmlXPathNewContext(doc);
// Recherche via xpath
xpath_objects = xmlXPathEvalExpression((xmlChar*)("//personnage/nom"), xpath_context);
if(xpath_objects == NULL)
cout << "La balise nom est obligatoire !\n";
// Affichage des résultats
cout << "Nom de la balise : " << xpath_objects->nodesetval->nodeTab[0]->name << "\n";
cout << "Valeur de la balise : " << (char*)(xpath_objects->nodesetval->nodeTab[0]->content) << "\n";
cout << "Fin\n";
// Libération de la mémoire
xmlXPathFreeObject(xpath_objects);
xmlXPathFreeContext(xpath_context);
xmlFreeDoc(doc);
我的XML文件:
<personnage>
<nom>Toto</nom>
</personnage>
xmlNode的说明:
Structure xmlNode
struct _xmlNode {
void * _private : application data
xmlElementType type : type number, must be second !
const xmlChar * name : the name of the node, or the entity
struct _xmlNode * children : parent->childs link
struct _xmlNode * last : last child link
struct _xmlNode * parent : child->parent link
struct _xmlNode * next : next sibling link
struct _xmlNode * prev : previous sibling link
struct _xmlDoc * doc : the containing document End of common p
xmlNs * ns : pointer to the associated namespace
xmlChar * content : the content
struct _xmlAttr * properties : properties list
xmlNs * nsDef : namespace definitions on this node
void * psvi : for type/PSVI informations
unsigned short line : line number
unsigned short extra : extra data for XPath/XSLT
}
此处提供完整文档:http://xmlsoft.org/html/libxml-tree.html#xmlNode
这是输出:
Nom de la balise : nom
Valeur de la balise : damien@caturday:~$
有人能帮帮我吗?
谢谢,
达明
答案 0 :(得分:0)
事实上,正如Luke所说,对于libxml,xmlNode的内容是另一个节点。 因此,我们必须访问子节点才能读取所选节点的内容。
就我而言,解决方案是:
cout << "Valeur de la balise : " << (char*)(xpath_objects->nodesetval->nodeTab[0]->children->content) << "\n";
谢谢卢克。