转载:迷你型XML文档生成器(ANSI C)

为解决嵌入式项目中XML状态报文生成问题,作者用200行C代码开发了一个轻量级XML文档生成器MiniXML,适用于Windows、Linux及Unix平台。该生成器能够高效创建XML文档,支持节点添加、属性设置等功能。
 http://www.cppblog.com/dyj057/archive/2007/01/29/18132.aspx

最近做嵌入式项目,需要生成XML状态报文,C++的XML的解 析器就不能用了。然后使用xmllib2,功能挺多,也很稳定,就是太大了,不利于移植到ARM,而且有很多的功能用不上,编译部署麻烦。一日,看了一本 书上好像这么说: 一个工具解决的问题比它引入的问题还多,就去掉它,重新从零开始。感觉说得的有道理,我还不如自己写一个。Forge....
花了一下午,共200行C代码完成了一个XML文档生成器,测试了一下效率相当高,也很稳定,感觉好极了。那位大哥如果能做的更精巧,不妨提携一下小弟,不吝指教。
工程名称:MiniXML
工程下载:
http://www.cppblog.com/Files/dyj057/minixml.zip

在XP+VS2003中编译通过,你也可以在Linux,Unix上使用。

使用例子:

xmlNodePtr child;
        xmlNodePtr nameNode ;
        xmlDocPtr doc 
=
 xmlNewDoc();
        doc
-> root  =  xmlNewNode( " employees "
);

        child 
=  xmlAddChild(doc -> root, xmlNewNode( " employee "
));
        xmlAddProp(child,
" age " , " 28 "
);
        xmlAddProp(child,
" sexy " , " male "
);
        nameNode 
=  xmlAddChild(child, xmlNewNode( " name "
));
        xmlAddText(nameNode, xmlNewText(
" Nicholas C. Zakas "
));

        child 
=  xmlAddChild(doc -> root, xmlNewNode( " employee "
));
        xmlAddProp(child,
" age " , " 22 "
);
        xmlAddProp(child,
" sexy " , " male "
);
        nameNode 
=  xmlAddChild(child, xmlNewNode( " name "
));
        xmlAddText(nameNode, xmlNewText(
" Jim Smith "
));

        printfXmlDoc(stdout,doc);
        xmlFreeDoc(doc);


生成XML文档如下:
<?xml version="1.0" encoding="utf-8"?>
<employees>
 <employee age="28" sexy="male">
  <name>Nicholas C. Zakas</name>
 </employee>
 <employee age="22" sexy="male">
  <name>Jim Smith</name>
 </employee>
</employees>

Functions

xmlDocPtr   xmlNewDoc ()   xmlDoc struct pointer
void  xmlFreeDoc ( xmlDocPtr doc)   free XML document struct
void  xmlFreeNode ( xmlNodePtr node)   free XML document struct
void  xmlAddText ( xmlNodePtr node, xmlTextNodePtr text)   add a text node to a element
xmlNodePtr   xmlNewNode (const char *name)   create a new element node
xmlTextNodePtr   xmlNewText (const char *text)   create a new text node
xmlNodePtr   xmlAddChild ( xmlNodePtr father, xmlNodePtr child)   add child node to the father node
void  xmlAddProp ( xmlNodePtr node, const char *propName, const char *propValue)   add property to a node
void  printfXmlDoc (FILE *f, xmlDocPtr doc)   print document's XML to a file

 

posted on 2007-01-29 11:31 天下无双 阅读(555) 评论(9)   编辑  收藏 引用 所属分类: C/C++

FeedBack:
#  re: 迷你型XML文档生成器(ANSI C)
2007-01-29 13:12 | gql
下不下来   回复   更多评论
  
#  re: 迷你型XML文档生成器(ANSI C)
2007-01-29 13:22 | 天下无双
刚才链接有点问题,现在更新了,可以下载了。不好意思。   回复   更多评论
  
#  re: 迷你型XML文档生成器(ANSI C)
2007-01-29 14:52 | gql
看了,够轻巧   回复   更多评论
  
#  re: 迷你型XML文档生成器(ANSI C)
2007-01-29 15:23 | 天下无双
我在Linux中用GCC编译有些问题,正在更改,主要是struct link和unistd.h中的类型冲突了。   回复   更多评论
  
#  re: 迷你型XML文档生成器(ANSI C)
2007-01-31 10:00 | nitemare_ogod
http://www.easysw.com/~mike/mxml/

我用这个,并改造了一下,这个不支持mbcs,我改了一个,并迁移到一个嵌入系统中.
呵呵,比你那个更简单,编译后库大小32K,具有 解析、查找、生成、遍历 功能,一般不是太复杂的应用足够了。可贵的是全部实现是标准c,移植很容易。   回复   更多评论
  
#  re: 迷你型XML文档生成器(ANSI C)
2007-01-31 12:12 | 天下无双
看了楼上说的那个库,确实不错。它的版本是2.2.2我的才0.1.0.1,所以我的肯定比不过它的。不过我的才200行,它的一个测试文件都有600行,哈哈   回复   更多评论
  
#  re: 迷你型XML文档生成器(ANSI C)
2007-01-31 14:28 | nitemare_ogod
我用只用1.3 ,只支持mbcs,其它的支持全部去掉了。
呵呵,希望对你有帮助。   回复   更多评论
  
#  re: 迷你型XML文档生成器(ANSI C)
2007-02-05 08:41 | 阿牛
一日,看了一本书上好像这么说: 一个工具解决的问题比它引入的问题还多,就去掉它,重新从零开始。?????????? :)   回复   更多评论
  
#  re: 迷你型XML文档生成器(ANSI C)
2007-02-05 08:58 | 天下无双
呵呵,就是《Unix编程哲学》,真是好书!!   回复   更多评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值