xerces-c用DOM方式操作xml

原创 2015年07月09日 11:33:43

xerces-c是一个可以校验XML合法性的XML解析器,它的语言是C++,它的官方主页:http://xml.apache.org/xerces-c。它支持下面这些标准:XML 1.0 ,XML 1.1 ,DOM 1, 2, 3 , SAX 1.0 和SAX 2.0, XML Schema。


xerces操作XML主要是分几步:

  1. 先调用XMLPlatformUtils::Initialize初始化环境,其中最重要是初始化内存管理器。如果没有调用这个,直接进行下面的步骤,程序会崩溃。
  2. 使用XercesDOMParser::parse方法来解析XML
  3. 使用XercesDOMParser::getDocument来DOMDocument对象指针
  4. 通过调用DOMDocument::getDocumentElement从DOMDocument对象指针里获取文档的主节点的指针,类型为DOMElement

用一个例子来演示一下:


address.xml:

<?xml version="1.0" encoding="utf-8"?>
<Address>
    <Recipient>Mr. Walter C. Brown</Recipient>
    <House>49</House>
    <Street>Featherstone Street</Street>
    <Town>LONDON</Town>
    <PostCode>EC1Y 8SY</PostCode>
    <Country>UK</Country>
</Address>

address.cpp:

#include <stdio.h>
#include <xercesc/parsers/XercesDOMParser.hpp>
#include <xercesc/sax/SAXException.hpp>
#include <xercesc/dom/DOMException.hpp>
#include <xercesc/dom/DOMElement.hpp>
#include <xercesc/dom/DOMLSException.hpp>

using namespace XERCES_CPP_NAMESPACE;

int main(int argc, char* argv[] )
{
	if ( argc < 2 )
	{
		printf( "must specify a file\n" );
		return -1;
	}

	XMLPlatformUtils::Initialize();

	XercesDOMParser parser;
	try
	{
		parser.parse( argv[1] );
  	} catch ( SAXException& e )
	{ 
 		printf( "msg:%s\n", XMLString::transcode(e.getMessage() ) );
		 return -2;
	 }
	catch ( XMLException& e )
	{
		printf( "code:%d, msg:%s\n", e.getCode(), XMLString::transcode( e.getMessage() ) );
		return -3;
	}
	catch (	DOMException& e )
	{
		printf( "code:%d, msg:%s\n", e.code, e.msg );
		return -4;
	}

	DOMDocument* pDoc = NULL;

	try 
	{
		pDoc = parser.getDocument();
	} catch ( DOMLSException& e )
	{
		printf( "code:%d, msg:%s\n", e.code, e.msg );
		return -5;
	} catch ( DOMException& e )
	{
		printf( "code:%d, msg:%s\n", e.code, e.msg );
		return -6;
	}

	DOMElement* root = pDoc->getDocumentElement();
	if ( root == NULL )
	{
		return -7;
	}

	DOMElement* child = root->getFirstElementChild();
	XMLSize_t cnt = root->getChildElementCount();
	for ( XMLSize_t i = 0; i < cnt; i++ )
	{
		char* name = XMLString::transcode( child->getTagName() );
		printf( "%s=", name );
		XMLString::release( &name);

		char* value = XMLString::transcode(child->getTextContent());
		printf( "%s\n", value );
		XMLString::release( &value );

		child = child->getNextElementSibling();
	}

	return 0;
}

编译:

[xuzhina@localhost sample]$ g++ -g -o address address.cpp -lxerces-c

运行结果:

[xuzhina@localhost sample]$ ./address address.xml
Recipient=Mr. Walter C. Brown
House=49
Street=Featherstone Street
Town=LONDON
PostCode=EC1Y 8SY
Country=UK


版权声明:本文为博主原创文章,未经博主允许不得转载。

XML解析简介及Xerces-C++简单使用举例

XML解析简介及Xerces-C++简单使用举例!
  • fengbingchun
  • fengbingchun
  • 2014年09月21日 17:09
  • 8214

Xerces C++ DOM解析XML文档

前一阵子学习Xerces-C++用于解析指定格式XML文档。在这里,把自己的学习经历和大家分享一下,在这里仅仅讲一些入门的知识,希望对大家有所帮助。 Xerces-C++是什么?      Xer...
  • w174504744
  • w174504744
  • 2012年03月30日 08:51
  • 4955

xerces-c-src-current.zip

  • 2008年09月06日 20:56
  • 11.28MB
  • 下载

Xerces-C++

  • 2010年03月10日 09:43
  • 6.82MB
  • 下载

xerces C/C++ 读取XML文件的一个小例子

main.cpp #include #include #include #include #include #include // Other include ...
  • Jack_Wong2010
  • Jack_Wong2010
  • 2014年04月09日 10:21
  • 3803

Xerces-C++ DOM编程指南(一)

 原文地址:http://xerces.apache.org/xerces-c/program-dom.html设计目标    DOM的C++实现是基于阿帕奇推荐的DOM(Apache Recomme...
  • kybd2006
  • kybd2006
  • 2007年09月28日 15:32
  • 5801

linux安装xml开发包xerces-c

xerces介绍Xerces-C++ 的前身是 IBM 的 XML4C 项目。XML4C 和 XML4J 是两个并列的项目,而 XML4J 是 Xerces-J——Java 实现——的前身。I...
  • chenxiaohua
  • chenxiaohua
  • 2008年01月22日 14:07
  • 9389

xerces解析器的使用实例详解

#include #include #include #include #include #include #include
  • len_yue_mo_fu
  • len_yue_mo_fu
  • 2017年04月18日 17:33
  • 362

使用Xerces DOM 处理XML文件

最近需要处理XML文件,学习了一下Xerces类库。同其他的XML解析库相比,这个类库比较庞大,功能也相对比较完善。Xerces C++是其中的C++类库,相对的,还有一个JAVA类库。使用Xerce...
  • wangpeng110m
  • wangpeng110m
  • 2009年05月14日 09:31
  • 3787

DOM Xerces类库使用方法

DOM Xerces类库使用方法Tuxedo中XML的历史  如今随着XML逐渐成为主流的数据格式之一,自然而然地 Tuxedo将之作为一种基本缓冲类型予以支持。    Tuxedo 7.1 引入了X...
  • zhujun012
  • zhujun012
  • 2011年01月13日 18:26
  • 573
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:xerces-c用DOM方式操作xml
举报原因:
原因补充:

(最多只允许输入30个字)