多种XML解析方法
本文介绍了各种解析方法,着重分析了各自的优缺点:
解析的重要性
解析为什么重要?因为所有 XML 处理都从解析开始。无论使用高层编程语言(如 XSLT)还是低层 Java 编程,第一步都是要读入 XML 文件,解码结构和检索信息等等,这就是解析。
解析文档时面临的第一个选择是采用现成的解析库(基本上每种编程语言都有,包括 COBOL [Common Business Oriented Language])还是自己创建一个。答案非常简单:选择现成的库。
坦白地说,XML 不是一种多么复杂的语法,因此认为可以自己通过正则表达式或其他特殊方法来解析的想法是可以理解的。但实际上却很难成功:XML 语法要求支持多种编码和很多难以捉摸的特性,比如 CDATA 节和实体。自定义的实现几乎很难照顾到所有这些方面,因而造成了不兼容性。
相反,随开发环境提供的解析器大都经过了与兼容性有关的测试。采用 XML 这样的标准语法的主要原因是兼容其他应用程序和工具箱,这是真正值得使用经过良好测试的库的情况之一。
多数解析器提供了至少两种 API,通常是一个对象模型 API 和一个事件 API(也称为流 API)。比如,Java 平台同时提供了 DOM(文档对象模型)和 SAX(Simple API for XML)。
这两套 API 提供了相同的服务:文档解码、可选的验证、名称空间解析等等。差别不在于服务而在于 API 使用的数据模型。
关键的选择:第一种方法
对象模型 API 定义了层次化对象模型来表示 XML 文档。换句话说,对应 XML 语法中的每个概念定义相应的类:元素、属性、实体、文档。解析器读入 XML 文档的时候,建立 XML 语法和类之间的一对一映射。比如,每遇到一个标记,就实例化一个元素类。
毫不奇怪,对哪种数据模型最好存在一些争议。W3C 规范化了 DOM,它的主要优点是可移植性:它是作为一种 CORBA 接口定义的,被映射到很多语言。因此如果了解了 JavaScript 中的 DOM,也就知道了 Java、C++、Perl、Python 和其他语言中的 DOM。
另一种数据模型是 JDOM,一种针对 Java 优化的 DOM(专用于 Java),和 Java 语言结合得更紧密,但是按照定义缺乏可移植性。
尽管人们可以继续商讨对 XML 语法来说哪种数据模型最好,但我认为没有多少意义,因为各种基于对象的 API 其优点和不足基本上是一样的。从好的方面来说,如果熟悉 XML 语法的话,对象模型 API 更容易理解。因为它直接从 XML 语法映射到类,很容易学习、使用和调试。
简单的代价是效率,至
相关文档:
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.jdom.xpath.XPath;
public class XMLReader {
priv ......
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO;
using System.Xml;
using System.Text; ......
五、XML模式
l XML模式能更精确的处理XML结构约束的表示之外还为约束数据的处理提供一个XML样式。模式只是一个XML文档,受DTD的约束。对于XML模式而言,XML DTD只是一种创建文档约束的手段。因为XML模式是为了强化XML文档的有效性,它必须采用一种机制,而不是自己定义约束条件。这种机制必须是一个DTD。但是原始的D ......
2010-05-18
五、验证XML
l 属性了特征方法
方 法
返回类型
参 数
语 法
setProperty()
void
String propertyId,
Object value
parser.setProperty(“[Property URI]”,
”[Object parameter]”);
setFeature()
void
String feat ......
xml:
<?xml version="1.0" encoding="utf-8" ?>
<library>
<name>首都图书馆</name>
<address>朝阳区华威桥南</address>
<books>
<book>
<id>0000</id>
</book>
< ......