2013-11-20 49 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