xml c libxml类库使用

xml

参考地址: http://jianlee.ylinux.org/Computer/C/libxml.html

实例:

/*
* =====================================================================================
*
* Filename: xml.c
*
* Description:
*
* Version: 1.0
* Created: 07/07/2011 11:47:54 AM
* Revision: none
* Compiler: gcc
*
* Author: kangle.wang (mn), wangkangluo1@gmail.com
* Company: APE-TECH
*
* =====================================================================================
*/

#include
<stdio.h>
#include
<stdlib.h>
#include
<libxml/parser.h>
#include
<libxml/tree.h>

int main (int argc, char **argv)
{
xmlDocPtr pdoc
= NULL;
xmlNodePtr proot_node
= NULL,pnode = NULL,pnode1 = NULL;

// 创建一个新文档并设置 root 节点
// 一个 XML 文件只有一个 root 节点
pdoc = xmlNewDoc (BAD_CAST "1.0");
proot_node
= xmlNewNode (NULL, BAD_CAST "根节点");
xmlNewProp (proot_node, BAD_CAST
"版本", BAD_CAST "1.0");
xmlDocSetRootElement (pdoc, proot_node);

pnode
= xmlNewNode (NULL, BAD_CAST "子节点1");
// 创建上面 pnode 的子节点
xmlNewChild (pnode, NULL, BAD_CAST "子子节点1", BAD_CAST "信息");
// 添加子节点到 root 节点
xmlAddChild (proot_node, pnode);

pnode1
= xmlNewNode (NULL, BAD_CAST "子子节点1");
xmlAddChild (pnode, pnode1);
xmlAddChild (pnode1,xmlNewText (BAD_CAST
"这是更低的节点,子子子节点1"));

// 还可以这样直接创建一个子节点到 root 节点上
xmlNewTextChild (proot_node, NULL, BAD_CAST "子节点2", BAD_CAST "子节点2的内容");
xmlNewTextChild (proot_node, NULL, BAD_CAST
"子节点3", BAD_CAST "子节点3的内容");

// 保存 xml 为文件,如果没有给出文件名参数,就输出到标准输出
xmlSaveFormatFileEnc (argc > 1 ? argv[1]:"-", pdoc, "UTF-8", 1);

// 释放资源
xmlFreeDoc (pdoc);
xmlCleanupParser ();
xmlMemoryDump ();
return 0;
}

编译:gcc -g -Wall -O0 xml.c -o xml -I /usr/include/libxml2 -lxml2

运行:./xml test.xml

结果:

<?xml version="1.0" encoding="UTF-8"?>
<根节点 版本="1.0">
<子节点1>
<子子节点1>信息</子子节点1>
<子子节点1>这是更低的节点,子子子节点1</子子节点1>
</子节点1>
<子节点2>子节点2的内容</子节点2>
<子节点3>子节点3的内容</子节点3>
</根节点>

原文地址:https://www.cnblogs.com/wangkangluo1/p/2099032.html