2010-08-12 56 views
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> 

回答

7

我發現這應該是return (char*)cur->children->content;通過試驗和錯誤。

+1

節點的內容是該節點的子節點,因此您必須先訪問子節點。您也可以考慮使用xmlNodeGetContent函數,而不是直接訪問結構。也就是「return(char *)xmlNodeGetContent(cur-> children);」。 – Ishmael 2010-10-21 20:09:44