关于SAX的解释,和好处,不做过多的介绍,你完全可以搜索引擎里面找到茫茫多的介绍http://baike.soso.com/v123641.htm?ch=ch.bk.innerlink;
本文的主要目的是介绍如何在自己的C++程序中利用Xerces C++ SAX解析XML文档;
1、Xerces C++下载
首先,我们需要去下载Xerces C++:http://xerces.apache.org/xerces-c/download.cgi
以上连接中给出了各种VS版本的Xerces C++的编译文件和源代码,供你下载使用。
2、在工程中引入Xerces C++
1、C/C++ 常规中:附件包含目录:引入include ;头文件
2、链接器常规中:附件包含目录:引入lib;bin;文件
3、链接器输入中:附加依赖项:引入:xerces-c_3.lib xerces-c_static_3.lib
3、OK以上环境搭建好后,开始编码吧
#include <xercesc/util/PlatformUtils.hpp>
#include <xercesc/sax2/SAX2XMLReader.hpp>
#include <xercesc/sax2/DefaultHandler.hpp>
#include <xercesc/sax2/XMLReaderFactory.hpp>
#include <xercesc/util/XMLString.hpp>
#include <iostream>
#include "MySAX2Handler.h"
using namespace std;
using namespace xercesc_3_1;
int main (int argc, char* args[]) {
try {
XMLPlatformUtils::Initialize();
}
catch (const XMLException& toCatch) {
char* message = XMLString::transcode(toCatch.getMessage());
cout << "Error during initialization! :\n";
cout << "Exception message is: \n"
<< message << "\n";
XMLString::release(&message);
return 1;
}
char* xmlFile = "x1.xml";
SAX2XMLReader* parser = XMLReaderFactory::createXMLReader();
parser->setFeature(XMLUni::fgSAX2CoreValidation, true);
parser->setFeature(XMLUni::fgSAX2CoreNameSpaces, true); // optional
parser->setFeature(XMLUni::fgXercesDynamic, false);
parser->setFeature(XMLUni::fgXercesSchema, true);
parser->setFeature(XMLUni::fgXercesSchemaFullChecking, true);
MySAX2Handler* defaultHandler = new MySAX2Handler();
parser->setContentHandler(defaultHandler);
parser->setErrorHandler(defaultHandler);
parser->setEntityResolver(defaultHandler);
try {
parser->parse(xmlFile);
}
catch (const XMLException& toCatch) {
char* message = XMLString::transcode(toCatch.getMessage());
cout << "Exception message is: \n"
<< message << "\n";
XMLString::release(&message);
return -1;
}
catch (const SAXParseException& toCatch) {
char* message = XMLString::transcode(toCatch.getMessage());
cout << "Exception message is: \n"
<< message << "\n";
XMLString::release(&message);
return -1;
}
catch (...) {
cout << "Unexpected Exception \n" ;
return -1;
}
defaultHandler->OutputPsList();
delete parser;
delete defaultHandler;
XMLPlatformUtils::Terminate();
system("PAUSE");
return 0;
}
main()函数的声明:其中包括SAX解析器的声明。
4、需要自己实现自己的接口:
#pragma once
#include<xercesc/sax2/DefaultHandler.hpp>
#include <xercesc/sax2/Attributes.hpp>
#include "PathsynopsisNode.h"
using namespace std;
using namespace xercesc_3_1;
class MySAX2Handler :public DefaultHandler
{
public:
MySAX2Handler(void);
~MySAX2Handler(void);
public:
void startElement(
const XMLCh* const uri,
const XMLCh* const localname,
const XMLCh* const qname,
const Attributes& attrs
);
void characters(
const XMLCh* const chars
, const XMLSize_t length
);
void endElement(
const XMLCh* const uri,
const XMLCh* const localname,
const XMLCh* const qname
);
void fatalError(const SAXParseException&);
};
5、对于SAX解析XML数据中存在中文的情况,SAX会直接进入到 fatalError事件中,导致解析错误的问题。
需要我们在XML文档的开头添加文档编码方式:<?xml version="1.0" encoding="gb2312" ?>
分享到:
相关推荐
vs2013使用Xerces C++ SAX解析XML文档,附件为整个vscode的项目,可以根据个人需要,自行编译各个版本
Xerces分析器可处理Java和C++,它采用互联网联盟XML、文件对象模型以及用于XML的简单API标准。所有的Xerces分析器都是模块化可配置的。它为C++版本提供了Perl封装,允许访问Perl的XML分析器,它还提供对统一编码字符...
C++开源的xml解析器,当前最新的版本xerces-c-src_2_8_0。Xerces-C++ 的前身是 IBM 的 XML4C 项目。XML4C 和 XML4J 是两个并列的...Xerces-C++是一个非常健壮的 XML 解析器,其提供的两种解析XML文档的方法,DOM和SAX。
xerces-c++ 2.8应用,主要报错xml文件的解析,创建,修改保存。schema验证的。希望对初学者有所帮助.
SAX2方法读取XML文件,内容非常详实 (read XML file through SAX2 method, and it is in details.)
Xerces-C++ is a validating XML parser written in a portable subset of C++. Xerces-C++ makes it easy to give your application the ability to read and write XML data. A shared library is provided for ...
Xerces-C++ (通常也称为:Xerces-C)是一套健壮、强大(同时也很庞大)的 XML 解析库,它提供了验证,以及 SAX 和 DOM API。来源:http://www.d2school.com/
Xerces-C++ (通常也称为:Xerces-C)是一套健壮、强大(同时也很庞大)的 XML 解析库,它提供了验证,以及 SAX 和 DOM API。来源:http://www.d2school.com/
Xerces-C++ is a validating XML parser written in a portable subset of C++. Xerces-C++ makes it easy to give your application the ability to read and write XML data. A shared library is provided for ...
Xerces-C++ 是一个非常健壮的 XML 解析器,它提供了验证,以及 SAX 和 DOM API
Xerces-C是用可移植的C++子集编写的XML分析器。Xerces-C允许对XML数据进行读写操作。其特征及功能包括:兼容XML 1.0,能记录最近的DOM和SAX规范,可编程产生和验证XML,具有可内插的目录,具有验证和编码器,进行可...
C++版本,解析XML的库,支持DOM和SAX两种形式
其中基于DOM的有TinyXml,基于SAX的当然是Xerces。前者小巧快捷,便于使用,适合做数据交换。后者则是全功能的XML解析器。 7、内存管理:boost::smart_ptr,Hans-Boehm GC C/C++的内存管理是一个永恒的话题。...
一个实现XML DSIG和XML加密标准的C ++库。 基于Apache项目的Xerces(DOM / SAX解析器)和Xalan(XSL / XPATH处理器)库。
Xalan是个用于把XML文档转换为HTML纯文本或者其他XML类型文档XSLT处理器 5、CMarkup 参考网站WebSite:http://www.firstobject.com/xml.htm 这是种使用EDOMXML解析器在很多思路上面非常灵活实用值得大家在DOM和...