关系型XML输出转换为其他格式的全面指南
立即解锁
发布时间: 2025-08-17 01:24:07 阅读量: 2 订阅数: 15 


XML编程宝典:从基础到实践的全面指南
### 关系型 XML 输出转换为其他格式的全面指南
在处理关系型数据和 XML 文档时,将关系型 XML 输出转换为其他格式是一项常见且重要的任务。本文将详细介绍如何在不同的 RDBMS(关系型数据库管理系统)中进行 XSL 转换,包括 MS SQL Server、Oracle 和 DB2,并提供具体的操作步骤和代码示例。
#### 1. 转换关系型 XML 数据的概述
在实际应用中,我们常常需要将从 MS SQL Server、Oracle 和 DB2 等数据库中获取的 XML 数据进行转换,以实现数据的集成、展示等目的。可以使用 XSLT 转换将生成的 XML 与其他格式的 XML 进行集成,也可以直接将关系型 XML 输出转换为 HTML,或者将数据加载到 XML 数据岛中。
#### 2. 各 RDBMS 处理 XSL 转换的方式
不同的 RDBMS 供应商处理 XSL 转换的方式各有不同,下面分别介绍 MS SQL Server、Oracle 和 DB2 的处理方式。
##### 2.1 MS SQL Server 和 XSL
MS SQL Server 提供了两种转换数据的方式:
- **将 XSL 样式表包含在模板文件中作为默认样式表**:使用该模板创建的任何 XML 文档输出在返回给请求者之前会自动由 SQL Server 进行转换。
- **在进行 URL 调用模板文件时通过 URI 指定样式表**:如果模板中包含 XSL 样式表引用,而在调用模板的 URL 中也指定了样式表,则 URL 中的样式表将覆盖模板中的样式表引用。
以下是一个将 XML 数据转换为 HTML 的简单查询示例:
```xml
<?xml version="1.0" encoding="UTF-8"?>
<QueryRoot xmlns:sql="urn:schemas-microsoft-com:xml-sql"
sql:xsl="/stylesheets/ResultTransform.xsl">
<sql:query>
SELECT TOP 1 * FROM XMLProgrammingBible.dbo.AmazonListings FOR XML AUTO
</sql:query>
</QueryRoot>
```
也可以在 URL 中引用样式表,例如:
```
http://iis.benztech.com/XMLProgrammingBible/template/MultiQueryExample1.xml?xsl=/stylesheets/ResultTransform.xsl
```
下面是上述查询生成的 XML 输出示例:
```xml
<?xml version="1.0" encoding="UTF-8"?>
<QueryRoot>
<AmazonListings ProductID="1001" Ranking="1" Title="Hamlet/MacBeth"
ASIN="8432040231" Image="http://images.amazon.com/images/
P/8432040231.01.MZZZZZZZ.jpg" Small_Image="http://images.amazon.com
/images/P/8432040231.01.TZZZZZZZ.jpg" List_price="$7.95"
Release_date="2001-12-17T09:30:47-05:00" Binding="Paperback"
Availability="" Tagged_URL="http://www.amazon.com:80
/exec/obidos/redirect?tag=associateid&
benztechnonogies=9441&camp=1793&
link_code=xml&path=ASIN/8432040231"/>
</QueryRoot>
```
可以使用 XMLSpy 的样式表设计器将此 XML 文档转换为 HTML 表格。以下是生成的样式表的开头部分:
```xml
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<head/>
<body>
<br/>
<span style="font-family:Arial; ">XML Programming Bible -
Transformed Results of an MS SQL Server Quer</span>y<br/>
<br/>
<br/>
<xsl:for-each select="QueryRoot">
<xsl:for-each select="AmazonListings">
<xsl:if test="position()=1">
<table border="1">
<tbody>
<tr>
<td>
<span style="font-family:Arial; font-size:xx-small;
">ProductID</span>
</td>
<xsl:for-each select="../AmazonListings">
<td>
<xsl:for-each select="@ProductID">
<span style="font-family:Arial; font-size:xx-
small; ">
<xsl:value-of select="."/>
</span>
</xsl:for-each>
</td>
</xsl:for-each>
</tr>
```
##### 2.2 Oracle 和 XSL
Oracle 支持多种使用 XSLT 转换 XML 的方法:
- **使用 Oracle XDK 中的集成高性能解析和转换引擎**:可在多层环境中使用。
- **使用 XML DB XMLTRANSFORM 函数**:该函数接受 XMLType 数据类型的源 XML 文档和 XSLT 样式表,将样式表应用于 XML 文档并返回转换后的 XML 实例。
- **XSQL servlet 和 XSQL 页面发布框架也支持 XSLT 转换功能**。
以下是一个从 Oracle 数据创建 XML 文档的查询示例:
```sql
SELECT XMLELEMENT("RootElement", XMLFOREST(
PRODUCTID,
RANKING,
TITLE,
ASIN,
AUTHORID,
IMAGE,
SMALL_IMAGE,
LIST_PRICE,
RELEASE_DATE,
BINDING,
AVAILABILITY,
TAGGED_URL)) as "RESULT"
FROM AmazonListings
WHERE rownum = 1;
```
查询返回的示例 XML 文档如下:
```xml
<RootElement>
<PRODUCTID>1001</PRODUCTID>
<RANKING>1</RANKING>
<TITLE>Hamlet/MacBeth</TITLE>
<ASIN>8432040231</ASIN>
<AUTHORID>1001</AUTHORID>
<IMAGE>http://images.amazon.com/images/P/8432040231.01.MZZZZZZZ.jpg
</IMAGE>
<SMALL_IMAGE>http://images.amazon.com/images/P/8432040231.01.TZZZZZZZ.jpg
</SMALL_IMAGE>
<LIST_PRICE>7.95</LIST_PRICE>
<RELEASE_DATE>01-JUN-91</RELEASE_DATE>
<BINDING>Paperback</BINDING>
<TAGGED_URL>http://www.amazon.com:80/exec/obidos/redirect?
tag=associateid&benztechnonogies=9441&camp=1793&
link_code=xml&path=ASIN/8432040231</TAGGED_URL>
</RootElement>
```
为了存储样式表,可以创建一个名为 STYLESHEETS 的表,示例 SQL 如下:
```sql
CREATE
```
0
0
复制全文
相关推荐










