我正在使用libxml2和C++。下面的函数在
return (char*)cur->content;
处崩溃。当我将其更改为return (char*)cur->name;
时,它将返回标签的名称attribute
。我想要的是1、2和3(基于下面的XML文件和C++代码)。我做错了什么?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;
}
}
}
正在解析的XML文件部分:
<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>
(char*)XML_GET_CONTENT(cur->children)
宏,它会对空指针进行额外的检查。 - Giovanni Cerretani