windows下使用xerces
标签:
windows下使用Xerces-C++解析XML Xerces-C++: 简史Xerces-C++ 的前身是 IBM 的 XML4C 项目。XML4C 和 XML4J 是两个并列的项目,而 XML4J 是 Xerces-J——Java 实现——的前身。IBM 将这两个项目的源代码让与 Apache 软件基金会(Apache Software Foundation),他们将其分别改名为 Xerces-C++ 和 Xerces-J。 这两个项目是 Apache XML 组的核心项目(如果看到的是“Xerces-C”而不是“Xerces-C++”,也是同一个东西,因为这个项目一开始就是用 C(译者注:原文为C++)语言编写的)。
引用 :
下载和安装下载地址 :
Win32 版本上的编译主要步骤:
1.VS 2015打开xerces-c-3.1.2\projects\Win32\VC12\xerces-all\xerces-all.sln,选中XercesLib->右击->编译;
2.复制xerces-c-3.1.2\Build\Win32\VC12\Debug文件夹下的xerces-c_3_1D.dll,xerces-c_3D.lib文件到目标工程下;复制xerces-c-3.1.2下的src文件夹到目标工程下(可以不复制过来,,但必须指定对应的路径);
调用动态库的配置3.右击项目名,属性,配置“C++附加包含目录” 增加\src;配置“linker附加依赖项” 增加“xerces-c_3D.lib”;
参考:
项目示例 功能要求读取aaa.xml文件,遍历每一个节点,若存在子节点则输出当前结点名称,若不存在子节点则输出当前结点名称和内容(输入与输出见下图)。
包含头文件#include <xercesc/util/PlatformUtils.hpp>
#include <xercesc/dom/DOM.hpp>
#include <xercesc/sax/HandlerBase.hpp>
#include <xercesc/parsers/XercesDOMParser.hpp>
XERCES_CPP_NAMESPACE_USE
函数介绍初始化环境
XMLPlatformUtils::Initialize();
加载分析报文
XercesDOMParser *parser = new XercesDOMParser();
设置校验计划
parser->setDoNamespaces(true); // optional
parser->setValidationScheme(XercesDOMParser::Val_Always);
ErrorHandler* errHandler = (ErrorHandler*) new HandlerBase();
parser->setErrorHandler(errHandler);
载入XML文件
parser->parse("aaa.XML");
得到文档的树型结构
DOMDocument *doc = parser->getDocument();
DOMElement *root = doc->getDocumentElement();//读取根节点
获取子元素
DOMElement* child = root->getFirstElementChild();
获取元素名称和内容
char* name = XMLString::transcode(root->getTagName());
char* textContent = XMLString::transcode(root->getTextContent());
获取下一个同级元素
root = root->getNextElementSibling();
aaa.xml文件//----------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<MSG>
<META>
<SNDR>FIMS</SNDR>
<RCVR/>
<SEQN>29</SEQN>
<DDTM>20150121194100</DDTM>
<TYPE>DFME</TYPE>
<STYP>AIRL</STYP>
</META>
<DFLT>
<FLID>30798</FLID>
<FFID>3U-8899-20150925-D</FFID>
<FLTK>W/Z</FLTK>
<AIRL>
<ARPT>
<APNO>1</APNO>
<APCD>CGO</APCD>
<FPTT>20150925194100</FPTT>
<FETT>20150926062203</FETT>
<FRTT/><FPLT/>
<FELT/><FRLT/>
<APAT>2403</APAT>
</ARPT>
<ARPT>
<APNO>2</APNO>
<APCD>SJW</APCD>
<FPTT/><FETT/><FRTT/>
<FPLT>20150925224100</FPLT>
<FELT/><FRLT/>
<APAT>2403</APAT>
</ARPT>
</AIRL>
</DFLT>
</MSG>
//----------------------------------
编码实现//----------------------------------
// xmltest.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <stdlib.h>
#include <iostream>
#include <xercesc/util/PlatformUtils.hpp>
#include <xercesc/dom/DOM.hpp>
#include <xercesc/sax/HandlerBase.hpp>
#include <xercesc/parsers/XercesDOMParser.hpp>
XERCES_CPP_NAMESPACE_USE
using namespace std;
void GetData(DOMElement *root) ;//自定义函数
/*const int MAXN = 2000;
char XMLbuf[MAXN] = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><MSG><META><SNDR>SYSTEM</SNDR><TYPE>ERROR</TYPE><STYP/><DDTM>2015-09-25 14:15:25</DDTM><SEQN/></META><CONTENT><CODE>15</CODE><DESC>error,it is not on the IMF now,please retry login</DESC></CONTENT></MSG>";*/
int main()
{
/*//将字符串写入文件
FILE * fd = fopen("aaa.XML", "w");
fprintf(fd, XMLbuf);
fclose(fd);*/
//初始化环境
try{
XMLPlatformUtils::Initialize();
}
catch (const XMLException& toCatch) {
// Do your failure processing here
return -1;
}
温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/66982.html
- 上一篇:c#中字符串截取使用的方法(转)
- 下一篇:PopupWindow弹出菜单