首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C树XML序列化

问C树XML序列化
EN

Stack Overflow用户
提问于 2011-07-20 07:07:56
回答 2查看 778关注 0票数 0

我目前正在尝试递归地遍历树结构,并使用(语言) C将其序列化为字符串。对于C语言,我是一个真正的新手(来自Java,C#,动作脚本背景),而且我在掌握一般的东西方面遇到了困难。

我应该使用库来帮助生成XML吗?如何使用C实现递归?

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-07-20 07:18:42

我应该使用库来帮助生成

吗?

是。libxml、minixml和其他公司。我只想用google来了解其他人,但我还是选择了libxml。

如何使用C实现递归?

嗯,实现递归本身非常简单。例如,这是递归的:

代码语言:javascript
复制
int fact(int i)
{
    return i ? i*fact(i-1) : 1;
}

问题来自于你想要的复杂程度。但对于XML,请使用库。

票数 5
EN

Stack Overflow用户

发布于 2011-07-21 04:00:07

使用libxml,它可能是这样的:

代码语言:javascript
复制
#include <libxml/tree.h>

typedef struct _node
{
    int value;
    int childrenCount;
    struct _node *children;
} node;

char buff[256];

node* createTree()
{
    // some code to create the tree
}

// build XML for the tree recursively
void buildXml(xmlNodePtr xmlNodeParent, node *treeNode)
{
    int i;
    xmlNodePtr xmlNode = xmlNewChild(xmlNodeParent, NULL, BAD_CAST "node", NULL);
    sprintf(buff, "%i", treeNode->value);
    xmlNewProp(xmlNode, BAD_CAST "value", BAD_CAST buff);
    for (i = 0; i < treeNode->childrenCount; i++)
    {
        buildXml(xmlNode, &treeNode->children[i]);
    }
}

xmlDocPtr createDoc(node* treeRoot)
{
    xmlDocPtr doc = NULL;
    xmlNodePtr rootNode = NULL;

    doc = xmlNewDoc(BAD_CAST "1.0");
    rootNode = xmlNewNode(NULL, BAD_CAST "tree");
    xmlDocSetRootElement(doc, rootNode);

    buildXml(rootNode, treeRoot);

    return doc;
}

int main()
{
    node *root;
    xmlDocPtr xmlDoc;
    root = createTree();
    xmlDoc = createDoc(root);
    // print the result to console
    xmlSaveFormatFileEnc("-", xmlDoc, "UTF-8", 1);
}

这段代码使用了通用的n元树。如果你的树是二进制的,那么代码几乎是一样的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6755184

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档