2
我正在使用libxml2和C++。以下功能在return (char*)cur->content;
處崩潰。當我將其更改爲return (char*)cur->name;
時,它將返回attribute
這是標記的名稱。我想要的是1,2和3(基於C++代碼下面的XML文件)。我究竟做錯了什麼?如何使用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;
}
}
}
的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>
節點的內容是該節點的子節點,因此您必須先訪問子節點。您也可以考慮使用xmlNodeGetContent函數,而不是直接訪問結構。也就是「return(char *)xmlNodeGetContent(cur-> children);」。 – Ishmael 2010-10-21 20:09:44