XML解析与XSLT转换:技术详解与应用
立即解锁
发布时间: 2025-08-17 01:23:57 阅读量: 3 订阅数: 15 

### XML解析与XSLT转换:技术详解与应用
#### 1. SAX解析器相关内容
##### 1.1 SAX核心接口方法
SAX 1提供了一系列用于操作属性列表的方法,如下表所示:
| 方法名 | 描述 | 支持版本 |
| --- | --- | --- |
| getType(name) | 通过名称返回属性的类型 | SAX 1 |
| getValue(i) | 通过索引返回属性的值,索引从0开始 | SAX 1 |
| getValue(name) | 通过名称返回属性的值 | SAX 1 |
| removeAttribute(name) | 从属性列表中移除指定名称的属性 | SAX 1 |
| setAttributeList(AttributeList atts) | 重置属性列表的内容 | SAX 1 |
##### 1.2 SAX扩展接口
除了SAX核心接口,还有一些使用SAX扩展API实现的扩展接口,这些扩展接口是SAX解析器的可选接口。所有扩展都是使用SAX 2扩展API开发的,SAX 1没有扩展API。以下是一些重要的扩展接口:
- **Attributes2接口**:用于检查XML文档中的属性是否在DTD中声明,以及DTD是否为该属性指定了默认值,主要用于数据验证。其方法如下:
| 方法名 | 描述 | 支持版本 |
| --- | --- | --- |
| isDeclared(index) 或 isDeclared(qName) 或 isDeclared(uri, localName) | 如果属性在DTD中声明,则返回true,可接受索引(从0开始)、限定名或本地名作为参数 | SAX 2 |
| isSpecified(index) 或 isSpecified(qName) 或 isSpecified(uri, localName) | 如果DTD中指定了属性的默认值,则返回false,可接受索引(从0开始)、限定名或本地名作为参数 | SAX 2 |
- **DeclHandler接口**:用于返回DTD中属性、元素以及内部和外部实体的声明值。其方法如下:
| 方法名 | 描述 | 支持版本 |
| --- | --- | --- |
| attributeDecl(eName, aName, type, mode, value) | 返回DTD属性类型声明,返回值包括任何有效的DTD值,如“CDATA”、“ID”等 | SAX 2和MSXML |
| elementDecl(name, model) | 返回DTD元素类型声明,返回值包括任何有效的DTD值,如“EMPTY”、“ANY”等 | SAX 2和MSXML |
| externalEntityDecl(name, publicId, systemId) | 返回已解析的外部实体声明 | SAX 2和MSXML |
| internalEntityDecl(name, value) | 返回已解析的内部实体声明 | SAX 2和MSXML |
- **EntityResolver2接口**:通过以编程方式添加外部实体引用子集来扩展EntityResolver接口,可用于在解析时自动为XML文档添加预定义的DTD引用以进行验证。其方法如下:
| 方法名 | 描述 | 支持版本 |
| --- | --- | --- |
| getExternalSubset(name, baseURI) | 为没有有效DOCTYPE声明的文档返回外部子集 | SAX 2 |
| resolveEntity(name, publicId, baseURI, systemId) | 允许应用程序将外部实体映射到XML文档输入源,或通过URI映射外部实体 | SAX 2 |
- **LexicalHandler接口**:用于返回XML文档中词法事件的信息,可跟踪注释、CDATA部分的开始和结束、DTD声明的开始和结束以及实体的开始和结束。其方法如下:
| 方法名 | 描述 | 支持版本 |
| --- | --- | --- |
| comment(char[] ch, start, length) | 当解析器在文档中遇到注释时触发此事件 | SAX 2和MSXML |
| endCDATA() | 当解析器遇到CDATA部分的结束时触发此事件 | SAX 2和MSXML |
| endDTD() | 当解析器遇到DTD声明的结束时触发此事件 | SAX 2和MSXML |
| endEntity(name) | 当解析器遇到实体的结束时触发此事件 | SAX 2和MSXML |
| startCDATA() | 当解析器遇到CDATA部分的开始时触发此事件 | SAX 2和MSXML |
| startDTD(name, publicId, systemId) | 当解析器遇到DTD声明的开始时触发此事件 | SAX 2和MSXML |
| startEntity(name) | 当解析器遇到内部或外部XML实体的开始时触发此事件 | SAX 2和MSXML |
- **Locator2接口**:扩展Locator接口以返回XML文档的编码和XML版本。其方法如下:
| 方法名 | 描述 | 支持版本 |
| --- | --- | --- |
| getXMLVersion() | 返回实体的XML版本 | SAX 2 |
| getEncoding() | 返回实体的字符编码类型 | SAX 2 |
##### 1.3 SAX扩展辅助类
SAX扩展辅助类为SAX扩展接口提供了与SAX辅助类为SAX核心接口提供的相同的编程访问方式。这些辅助类仅适用于Java实现,目前MSXML不支持辅助类,但通过核心接口中的附加方法支持一些功能。
- **Attributes2Impl类**:是Attributes2接口的实现类,除了具备Attributes2接口的功能外,还允许添加、编辑和删除属性列表中的属性。其方法如下:
| 方法名 | 描述 | 支持版本 |
| --- | --- | --- |
| addAttribute(uri, localName, qName, type, value) | 将属性添加到属性列表的末尾,并将其“specified”标志设置为true | SAX 2 |
| isDeclared(index) 或 isDeclared(qName) 或 isDeclared(uri, localName) | 如果属性在DTD中声明,则返回true,可接受索引(从0开始)、限定名或本地名作为参数 | SAX 2 |
| isSpecified(index) 或 isSpecified(qName) 或 isSpecified(uri, localName) | 如果DTD中指定了属性的默认值,则返回false,可接受索引(从0开始)、限定名或本地名作为参数 | SAX 2 |
| removeAttribute(index) | 从属性列表中移除指定索引的属性,索引从0开始 | SAX 2 |
| setAttributes(Attributes atts) | 将指定的Attributes对象复制到新的Attributes对象 | SAX 2 |
| setDeclared(index, boolean value) | 设置指定属性的“declared”标志,索引从0开始 | SAX 2 |
| setSpecified(index, boolean value) | 设置指定属性的“specified”标志,索引从0开始 | SAX 2 |
- **DefaultHandler2类**:扩展了SAX2 DefaultHandler类,包含了SAX2 LexicalHandler、DeclHandler和EntityResolver2扩展接口的属性和方法。其方法如下:
| 方法名 | 描述 | 支持版本
0
0
复制全文
相关推荐










