RapidXml 读取文件并遍历节点的所有属性

RapidXml 试图成为最快的 XML DOM 解析工具包,同时保证解析结果的可用性、可移植性以及与 W3C 标准的兼容性。RapidXml 使用 C++ 编写,因此在操作同一数据时,其解析速度接近于 strlen() 函数。
整个解析工具包包含在一个头文件中,所以使用时不用编译也不用连接。要想使用 RapidXml 只要包含 rapidxml.hpp 即可,当然如果要用附加功能(如打印函数),你可以包含 rapidxml_print.hpp 文件。
RapidXml 为采用C++语言操作XML提供了机遇,同时结合XMPP协议也开启了诸如Wt、CxServer等基于C++的网络应用在即时通讯领域的更宽广的发展空间。

rapidxml 下载地址:https://sourceforge.net/projects/rapidxml/


测试示例:

读取xml文件,并遍历所有节点的所有属性。xml的文件内容如下:



  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  

测试程序代码:

#include 
#include 
#include 
#include "rapidxml/rapidxml.hpp"
#include "rapidxml/rapidxml_utils.hpp"//rapidxml::file
#include "rapidxml/rapidxml_print.hpp"//rapidxml::print
using namespace rapidxml;


std::string ReadFile(const char* fileName)
{
	std::string strBuffer;
	FILE *fp = fopen(fileName, "rb");
	if(NULL == fp)
	{
		return "";
	}

	char buf[1024];	
	while(true)
	{
		const size_t byteRead = fread(buf, 1, sizeof(buf), fp);
		if(0 == byteRead)
		{
			break;
		}
		strBuffer.insert(strBuffer.end(), buf, buf+byteRead);
	}
	fclose(fp);

	return strBuffer;
}
//
int ReadFileAndTraversal()
{
	//读取文件内容
	std::string szFileBuf = ReadFile("./Ellipsoid.xml");
	
	//使用rapidxml::file读取文件更方便
	rapidxml::file<> fdoc("Ellipsoid.xml");
	
	//打印读取的内容
	std::cout << fdoc.data() << std::endl;

	rapidxml::xml_document<> doc;
	doc.parse<0>(fdoc.data());
	//doc.parse<0>(szFileBuf.c_str());

	//打印整个XML内容
	std::cout << doc.name() << std::endl;

	//在XML文档中寻找第一个节点
	const rapidxml::xml_node<> *ellipsoid = doc.first_node("EllipsoidParams");
	if(NULL == ellipsoid)
	{
		return -1;
	}

	//遍历所有椭球信息
	for(rapidxml::xml_node<> *datum = ellipsoid->first_node("Datum");
		NULL != datum;
		datum = datum->next_sibling())
	{
		//遍历单个椭球的所有属性
		std::string szTmp("");
		for(rapidxml::xml_attribute * attr = datum->first_attribute("Name");
			attr != NULL;
			attr = attr->next_attribute())
		{
			szTmp.append(attr->name());//name() value()返回的字符串不会去掉首尾的空白字符
			szTmp.append(": ");
			szTmp.append(attr->value());
			szTmp.append(", ");
		}
		std::cout << szTmp.c_str() << std::endl;
	}

	return 0;
}

//
int _tmain(int argc, _TCHAR* argv[])
{	
	//读取文件并打印整个文件
	ReadFileAndTraversal();

	system("pause");

	return 0;
}

你可能感兴趣的:(HTML,/,XML)