C树XML序列化

我正在尝试递归循环遍历树结构并使用(语言)C将其序列化为字符串。当涉及到C(来自Java,C#,动作脚本背景)时,我是一个真正的新手。一般来说,我很难掌握一些东西。

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

谢谢

我应该使用库来帮助生成XML吗?

是。 libxml , minixml等。 只是谷歌知道别人,但我会选择libxml。

如何使用C实现递归?

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

int fact(int i) { return i ? i*fact(i-1) : 1; } 

问题在于你想要多么复杂。 但对于XML,请使用库。

使用libxml,它可以像这样:

 #include  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-ary树。 如果你的树是二进制的,那么代码几乎是一样的。