最近做嵌入式项目,需要生成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
天下无双 阅读(5294)
评论(11) 编辑 收藏 引用 所属分类:
C/C++