2011-10-03 72 views
-1

我在AC代码以下列方式定义一个简单的XML字符串:解析的XML值

char xmlstr[] = "<root><str1>Welcome</str1><str2>to</str2><str3>wonderland</str3></root>"; 

我想解析xmlstr获取分配给STR1,STR2,STR3标签的所有值。我正在使用libxml2 library。由于我在XML处理方面经验不足,无法获取所需标记的值。我尝试了一些来自网络的消息,但是我输错了结果。

回答

1

使用libxml2的解析你的字符串会是这个样子做XML解析:

char xmlstr[] = ...; 
char *str1, *str2, *str3; 
xmlDocPtr doc = xmlReadDoc(BAD_CAST xmlstr, "http://someurl", NULL, 0); 
xmlNodePtr root, child; 

if(!doc) 
{ /* error */ } 

root = xmlDocGetRootElement(doc); 

现在我们已经从你的xml字符串中解析了一个DOM结构,我们可以通过迭代yo的所有子值来提取这些值ur root标签:

for(child = root->children; child != NULL; child = child->next) 
{ 
    if(xmlStrcmp(child->name, BAD_CAST "str1") == 0) 
    { 
     str1 = (char *)xmlNodeGetContent(child); 
    } 

    /* repeat for str2 and str3 */ 
    ... 
} 
+0

在上面的url中有什么意义。我要给我的程序 – user976211

+0

坦率地说,我不确定。文档只声明这被用作“* base *”,无论如何。我想这个小例子并不重要。 – Constantinius

+0

我也发现一样。但是,感谢您的帮助。我可以做这个小补丁代码嵌入到我的巨大应用程序。 – user976211