2013-11-20 87 views
0

如何獲得valuechild atribute?例如xml:libxml如何獲得孩子屬性

<root> 
    <child> 
     <info>Lala</info> 
    </child> 
</root> 

我怎麼得到Lala?我試試這個(但它不工作:())

void parsePackage (xmlDocPtr doc, xmlNodePtr cur) { 
     xmlChar *key; 
     xmlChar *uri; 
     cur = cur->xmlChildrenNode; 
     while (cur != NULL) { 
     if ((!xmlStrcmp(cur->name, (const xmlChar *)"child"))) { 
      key = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1); 
      uri = xmlGetProp(cur, (const xmlChar *)"info"); 
      printf("Info: %s\n", uri); 
      xmlFree(key); 
     } 
      cur = cur->next; 
     } 
    return; 
} 

void parseDoc() { 
    xmlDocPtr doc; 
    xmlNodePtr cur; 

    doc = xmlParseFile("test.xml"); 

    if (doc == NULL) { 
     fprintf(stderr,"Document not parsed successfully. \n"); 
     return; 
    } 

    cur = xmlDocGetRootElement(doc); 

    if (cur == NULL) { 
     fprintf(stderr,"empty document\n"); 
     xmlFreeDoc(doc); 
     return; 
    } 

    if (xmlStrcmp(cur->name, (const xmlChar *) "root")) { 
     fprintf(stderr,"document of the wrong type, root node != package"); 
     xmlFreeDoc(doc); 
     return; 
    } 

    parsePackage(doc, cur); 
    xmlFreeDoc(doc); 
    return; 
} 

當我開始這個代碼我得到不LaLa,我得到null
對於編輯器(它看起來像你的文章主要是代碼;請添加一些更多的細節。)我沒有關於這種情況的更多細節...

回答

1

您正在使用xmlGetProp(),以檢索當前節點的屬性值中使用,但「信息」是個孩子,不是一個屬性,「兒童」的節點。你應該使用的是「info」節點上的xmlNodeGetContent()。

0

它看起來像印刷錯誤。你應該的 (const xmlChar *)"child")代替(const xmlChar *)"cild")

+0

是它的錯字; D – ternes3