`

libxml2读写

    博客分类:
  • c++
 
阅读更多
#include<libxml/parser.h>
#include<libxml/tree.h>

void writeXML(char* fileName)
{
    xmlDocPtr doc;
    xmlNodePtr rootNode;
    
    xmlNodePtr basicNode;
    xmlNodePtr nodeContents;
    
    xmlNodePtr sonNode;
    xmlNodePtr grandsonNode;
    
    //create document
    doc = xmlNewDoc(BAD_CAST XML_DEFAULT_VERSION);
    rootNode = xmlNewNode(NULL,BAD_CAST "rootNode");
    
    //set root node
    xmlDocSetRootElement(doc,rootNode);

    //add nodes
    xmlNewTextChild(rootNode, NULL, BAD_CAST "nodes", BAD_CAST "nodes1");
    xmlNewTextChild(rootNode, NULL, BAD_CAST "nodes", BAD_CAST "nodes2");
    xmlNewTextChild(rootNode, NULL, BAD_CAST "nodes", BAD_CAST "nodes3");
    
    //add a basic node which has attribute and contents
    basicNode = xmlNewNode(NULL,BAD_CAST "basicNode");
    nodeContents = xmlNewText(BAD_CAST "contents");
    xmlNewProp(basicNode,BAD_CAST "size",BAD_CAST "123");//add a attribute
    xmlAddChild(basicNode,nodeContents);//add contents to node
    xmlAddChild(rootNode,basicNode);//add node to root
    
    //nesting
    sonNode = xmlNewNode(NULL,BAD_CAST "son");
    grandsonNode = xmlNewNode(NULL,BAD_CAST "grandson");
    xmlAddChild(grandsonNode,xmlNewText(BAD_CAST "nesting node"));
    xmlAddChild(sonNode,grandsonNode);
    xmlAddChild(rootNode,sonNode);

	  //save file
    int save = xmlSaveFile(fileName,doc);
    if(save!=-1){
	    printf("write %d bytes\n",save);
    }
    
    //free memory
    xmlFreeDoc(doc);
    xmlCleanupParser();
}

void readXML(char* fileName)
{
		xmlDocPtr doc;
		xmlNodePtr node;
		xmlChar *key;
		doc = xmlReadFile(fileName,"UTF-8",XML_PARSE_RECOVER);
		if(doc == NULL){
			return;
		}
		node = xmlDocGetRootElement(doc);
		if(node == NULL){
			return;
		}
		if(!xmlStrcmp(node->name,BAD_CAST "root")){
			xmlFreeDoc(doc);
			return;
		}
		
		node = node->xmlChildrenNode;
		xmlNodePtr attrNode = node;
		printf("start reading...\n");
		while(node!=NULL){
			if(!xmlStrcmp(node->name,(const xmlChar*)"basicNode")){
				key = xmlNodeGetContent(node);//get the contents of the node
				printf("basicNode:%s\n",key);
				xmlFree(key);
			}
			if(xmlHasProp(node,BAD_CAST "size")){
				attrNode = node;//save node which has attribute-"size"
			}
			node = node->next;
		}
		// get attribute
		xmlAttrPtr attrPtr = attrNode->properties;
		while(attrPtr!=NULL){
			 if (!xmlStrcmp(attrPtr->name, BAD_CAST "size")){
	         xmlChar* attr = xmlGetProp(attrNode,BAD_CAST "size");
	         printf("sizeAttr=%s\n",attr);
	         xmlFree(attr);
	     }
	     attrPtr = attrPtr->next;
		}
		xmlFree(doc);
}

int main(){
    char *fileName = "Demo.xml";
    writeXML(fileName);
    readXML(fileName);
}

write 193 bytes
start reading...
basicNode:contents
sizeAttr=123

分享到:
评论

相关推荐

    c++中使用libxml2读取xml文件

    ### C++中使用libxml2读取XML文件详解 #### 一、引言 随着XML(可扩展标记语言)在数据交换与存储领域的广泛应用,掌握如何有效地读取和解析XML文件成为了开发人员的一项必备技能。在C++环境中,libxml2库因其功能...

    libxml2-2.9.1-git

    6. **XML编码转换**:libxml2能够处理多种字符编码,如UTF-8、ISO-8859-1等,确保XML文档的正确读写。 7. **XML输出**:libxml2不仅能够解析XML,还能生成XML,提供XML文档的构建和序列化功能。 在libxml2-2.9.1...

    libxml2-2.9.1 x64 头文件+lib库+dll

    例如,他们可以使用libxml2解析XML文档,执行XPath查询,进行XML文档的读写操作,甚至转换XML到HTML。由于这个版本经过测试可以正常工作,因此对于64位环境的开发来说是一个可靠的依赖。 总之,libxml2-2.9.1 x64...

    libxml2-2.6.30.win32.zip

    4. `samples`目录:可能包含使用libxml2的示例程序,例如XML读写、XPath查询等,这些示例有助于开发者快速上手。 三、libxml2的应用场景 1. 数据交换:XML常用于不同系统之间的数据交换,libxml2库可以帮助开发者...

    libxml2库的32和64位及其demo程序

    **libxml2库详解** libxml2是一款强大的XML解析库,由Gnome项目开发并维护。它是开源软件,被广泛应用于各种操作系统,包括Windows、Linux和macOS等。该库支持XML、HTML、XSLT、XPath、XPointer等多种XML相关的标准...

    libxml2-2.9.6.tar

    libxml2的API设计简洁且易于使用,提供了丰富的函数和数据结构,便于开发者进行XML的读写、验证、编码转换和错误处理。同时,它支持C++绑定,方便C++开发者利用面向对象的特性进行编程。 四、应用场景 libxml2广泛...

    Linux libxml2和libaio

    Linux中的libxml2和libaio是两个非常重要的库,它们在系统级编程和高性能I/O操作中扮演着关键角色。 libxml2是用于处理XML(eXtensible Markup Language)文档的开源库,由Gnome项目开发。XML是一种结构化数据格式...

    以libxml2和minizip读取xlsx文件的示例

    本示例主要关注如何利用开源库libxml2和minizip来读取Microsoft Excel 2007(xlsx)文件。xlsx文件实际上是以Open XML标准为基础的ZIP压缩包,包含了多个XML文件,用于存储工作表数据、样式、公式等信息。下面我们将...

    C/C++利用libxml2高效输出XML大文件详解

    libxml2基本上算是xml的C/C++标准读写库。在linux、macOS里是默认支持的。可惜在Windows上有自己专有的msxml, 所以并不支持libxml2,恶心的是msxml还不是标配,还要必须另外下载安装。因此作为Windows上优先选择的...

    XML文件读写

    在Windows环境下,利用libxml2库可以方便地实现XML文件的读写操作。libxml2是开源的XML解析库,提供了一套完整的API,支持XML文档的解析、创建、修改和打印等功能。 本主题将详细介绍如何在Win32平台下,利用libxml...

    lua-xml:基于libxml2的Lua xml实现

    《lua-xml:基于libxml2的Lua XML实现详解》 在编程领域,XML(Extensible Markup Language)作为一种数据交换格式,广泛应用于不同系统间的数据传输和存储。它具有自解释性、结构化的特点,使得数据处理变得方便。...

    gd2.32&libxml2&zendoptiom&zlib1.2.3&jpegsrc&libpng&curl.rar

    标题中的“gd2.32&libxml2&zendoptiom&zlib1.2.3&jpegsrc&libpng&curl.rar”提及了一系列在IT领域中常用的库和工具,这些组件在Web开发、图像处理、网络通信等方面扮演着重要角色。让我们逐一深入探讨这些知识点: ...

    读写excel文件的类(改造了BasicExcel类)

    能读写excel文件, 支持excel ...libopc_test\config\win32-msvc\libxml2-2.7.7 libxml2-2.7.7.win32\include libopc_test\plib\config\msvc\plib\include libopc_vc6\include LIBXML2-2.7.7\INCLUDE lib: LIBOPC_VC6

    libxml2:https的只读镜像

    3. **XML编写**: 除了解析,libxml2还支持将内存中的数据结构转换回XML文档,实现了读写XML的功能。 4. **HTTP和FTP支持**: libxml2内置了简单的HTTP和FTP客户端,可以用于从网络获取XML文档。在“只读镜像”的场景...

    libxml教程(图文详解)

    通过上述教程,你可以了解如何在Windows环境下使用Visual Studio构建C++项目,集成libxml2并实现XML文件的读写操作。通过深入学习和实践,你可以进一步掌握XML文档的高级操作,提升你的软件开发能力。

    C++ 读写XML文件

    在C++中处理XML,通常我们会选择使用库,例如TinyXML、pugixml、libxml2等。MFC虽然不是一个专门处理XML的库,但它提供了一些基础的支持,如CXMLElement类和CXMLNode类,这些类可以帮助我们解析和生成XML文档。 ...

    Qt,docx文件读写

    Qt本身并不直接支持.docx文件的读写,但我们可以利用QIODevice和QFile类来处理ZIP文件,并通过第三方库如`libxml2`和`libzip`来解析和操作XML文档。此外,还有一些开源项目,如`docx4j`或`python-docx`,提供了更高...

    c 读写mxl实例

    1. **解析XML文档**:C语言中常用的库有libxml2,它提供了丰富的API来解析XML文档。首先,你需要使用`xmlReadFile()`函数加载XML文件,然后通过`xmlDoc`结构体处理整个文档。 2. **创建XML解析器上下文**:`...

    LIBXML2F90-开源

    2. **链表结构**:与许多 XML 解析器不同,LIBXML2F90 使用链表来表示解析后的数据。链表是一种灵活的数据结构,可以有效地处理动态变化的数据,允许在内存中轻松地添加、删除和修改节点。 3. **读写支持**:除了...

    使用c读写XML

    Libxml2 是一个xml c语言版的解析器,本来是为Gnome项目开发的工具,是一个...还支持c++、PHP、Pascal、Ruby、Tcl等语言的绑定,能在Windows、Linux、Solaris、MacOsX等平台上运行,本资源是基于libxml2动态库读写XML

Global site tag (gtag.js) - Google Analytics