利用 Xerces-C++ 提高 XML 应用程序的性能

94 篇文章 1 订阅

随着 Web 服务和面向服务架构(SOA)的出现,XML 已变得非常流行。它对于应用程序之间和 Web 上的数据交换起着非常重要的作用,并且是许多性能关键型场景的基础。

常用缩写词
  • API:应用程序编程接口(application programming interface)
  • CPU:中央处理单元(Central Processing Unit)
  • DOM:文档对象模型(Document Object Model)
  • DTD:文档类型定义(Document Type Definition)
  • SAX:XML 简单 API(Simple API for XML)
  • W3C:万维网联盟(World Wide Web Consortium)
  • XML:可扩展标记语言(Extensible Markup Language)

您可以通过有效地使用解析器提高 XML 应用程序的性能。Xerces-C++ 是可从 Apache 获得的开放源码 XML 验证解析器。本文将展示许多利用 Xerces-C++ 解析器提高应用程序性能的技巧。

Xerces-C++ 是一个作为共享库提供的 XML 验证解析器。这个库包含针对 DOM 和 SAX 的接口。具体地说,SAXParser 是针对 SAX 1.0 规范的接口:SAX2XMLReader 是针对 SAX 2.0 规范的接口;XercesDOMParser 是针对 DOM 规范的接口;DOMBuilder 是 DOM Level 3.0 Abstract Schemas and Load and Save 规范的 Load 接口的一个实现。

属性和特性

许多属性和特性对解析器的性能都有很大的影响。

使用正确的扫描程序

Xerces-C++ 的主要组件之一是扫描程序。它不只负责扫描 XML 实例,而且在评定 XML 文档的有效性方面起着重要作用。

Xerces-C++ 有四个扫描程序:IGXMLScanner、WFXMLScanner、DGXMLScanner 和 SGXMLScanner。为您的场景选择合适的扫描程序对于获得更好的性能非常重要。IGXMLScanner(默认的扫描程序)是一个通用的扫描程序,它不仅处理格式是否良好,而且针对 DTD 和/或 XML Schema 验证 XML 文档。另一方面,WFXMLScanner 只负责检查格式是否良好而不进行语法验证。如果您只关注文档的格式良好性就使用 WFXMLScanner。如果只进行 DTD 验证就使用 DGXMLScanner,如果只进行 XML Schema 验证就使用 SGXMLScanner。

通过在 SAX2XMLReader API 或 DOMBuilder API 中设置扫描程序属性,可以通知解析器使用哪个扫描程序。清单 1 说明如何在 SAX2XMLReader 上设置扫描程序。

清单 1. 在 SAX2XMLReader API 上设置扫描程序
                
#include <xercesc/internal/XMLGrammarPoolImpl.hpp>
#include <xercesc/sax2/XMLReaderFactory.hpp>
#include <xercesc/util/XMLUni.hpp>

XMLGrammarPool *grammarPool = new XMLGrammarPoolImpl(XMLPlatformUtils::fgMemoryManager);
SAX2XMLReader* parser = XMLReaderFactory::createXMLReader(
                               XMLPlatformUtils::fgMemoryManager, grammarPool);

parser->setProperty(XMLUni::fgXercesScannerName, (void *)XMLUni::fgSGXMLScanner);

对 SAXParser API 或 XercesDOMParser API,您可以调用 useScanner 方法来指定解析器应该使用哪个扫描程序,如

 

本文转自IBM Developerworks中国

        请点击此处查看全文

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值