【问题标题】:parsing for xml values解析xml值
【发布时间】:2011-10-03 07:13:43
【问题描述】:

我在 c 代码中以以下方式定义了一个简单的 xml 字符串:

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

我想解析 xmlstr 以获取分配给 str1、str2、str3 标记的所有值。

我正在使用libxml2 library。由于我在 xml 处理方面经验不足,因此无法获取所需标签的值。我尝试了一些来自网络的资源,但我结束了错误的输出。

【问题讨论】:

    标签: c xml parsing libxml2


    【解决方案1】:

    使用 libxml2 库解析您的字符串将如下所示:

    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 结构,我们可以通过遍历您的 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 */
        ...
    }
    

    【讨论】:

    • 上面的url是什么意思。我必须为我的计划付出什么
    • 坦率地说我不确定。文档仅声明这被用作“base”,无论这意味着什么。我想这在那个小例子中并不重要。
    • 我也发现了同样的情况。不过,感谢您的帮助。我可以将那个小补丁代码嵌入到我的庞大应用程序中。
    【解决方案2】:

    我通常使用 minixml 库做 xml 解析

    希望对你有帮助

    http://www.minixml.org/documentation.php/basics.html

    【讨论】:

    • 如果你能提供 c 代码,我会很有帮助,因为你熟悉 mxml。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-24
    • 2014-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多