如何使用 XSL 处理器来转换 XML 文档的格式
日期:2003 年 9 月 25 日
| 完成此方法文档后,您应该能够了解如何: |
• 使用 XSL 处理器来转换 XML 文档的格式 • 使用基本的 XSL 处理器 API |
引言
XML 已成为在 web 上和应用程序之间交换信息的实际标准。无论何时在应用程序/组件之间交换 XML 数据,都必须将它转换成适当的格式,以使应用程序可以理解它。实现这种转换的最简便的方法是使用 XSL 处理器 API 和 XSL 样式表。
这里是一个非常简单的示例:假设要在一个 Web 浏览器、一个 PDA 浏览器和移动电话中的一个微浏览器中显示一个天气信息页面。即使所有这三种设备中要传输给用户的信息是相同的,也必须修改它的格式、表示和样式来匹配特定的设备。在这个示例中,我们可以把内容和格式化说明分开。我们可以将天气信息以 XML 格式输入到 XSL 处理器中,然后让该处理器选择一个该浏览设备指定的样式表来将内容转换成适当的格式。
由此,我们可以通过使用适当的样式表来将 XML 内容转换成任何期望的格式。
此文档演示了如何使用 XSL 处理器 — Oracle XDK (XML Developer's Kit) 的一个组成部分 — 来转换 XML 文档的格式。
软件需求
说明
分析一下我们如何能够使用 Oracle XDK 中的 XSL 处理器来转换 XML 内容的格式。在这个方法文档中,通过将 XML 内容转换成 HTML 格式,生成了一个适合于 Web 浏览器的天气预报页面。这里是我们要遵循的步骤:
- 生成/检索 XML 格式的天气预报(源 XML 生成)
- 编写一个 XSL 样式表来将 XML 内容转换成适当的格式(样式表生成)
- 在 XSL 处理器中加载 XSL 样式表
- 在 XSL 处理器中加载 XML 文档
- 执行实际的转换(XSL 处理 — 在 XML 上应用 XSL 样式表)
- 输出经过转换的内容
参见下面给出的列表 1。该代码段列出了将被转换的 XML 文档。
<?xml version='1.0'?> <WEATHER> <CITY>Carlmont</CITY> <STATE>Ca</STATE> <DATE>11-Sep-2003</DATE> <TEMPERATURE> <HIGH>17</HIGH> <LOW>8</LOW> </TEMPERATURE> <SUN> <SUNRISE>6:45 AM</SUNRISE> <SUNSET>6:40 PM</SUNSET> </SUN> <FORECAST>The sky will be partly cloudy and mild showers are forecasted in the afternoon.Today's high will be around 15 deg celcius and the low will be around 7 deg celcius.There is a possibility of high northwesterly winds in the late afternoon.Night will be mainly clear. </FORECAST> </WEATHER>
|
|
列表 1 — Weather.xml
参见下面给出的列表 2。该代码段显示了被用来将 Weather.xml 转换成可以在 Web 浏览器中显示的格式的样式表。
<?xml version='1.0' encoding='UTF-8'?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <!-- Root template --> <xsl:template match="WEATHER"> <html> <head> <title>Weather Report</title> </head> <body> <table cellpadding="1" cellspacing="1" border="1" style="height:117px; width:473px;"> <tbody> <tr align="center" style="font-family:helvetica,arial,sans-serif;"> <td style="vertical-align:top; background-color:rgb(204, 204, 204);" colspan="4"> <span style="font-weight:bold;">Weather Report</span> </td> </tr> <tr> <td style="vertical-align:top; width:50%; text-align:center; font-weight:bold;" colspan="2">City : <xsl:value-of select="CITY"/> </td> <td style="vertical-align:top; text-align:center;" colspan="2"> <span style="font-weight:bold;">State : <xsl:value-of select="STATE"/> </span>
</td> </tr> <tr> <td style="vertical-align:top; text-align:center;" colspan="4"> <span style="font-weight:bold;">Date : <xsl:value-of select="DATE"/> </span> <br/> </td> </tr> <tr> <td style="vertical-align:top; text-align:center;" colspan="2"> <span style="font-weight:bold;">Temperature</span> <br/> </td> <td style="vertical-align:top; text-align:center;" colspan="2"> <span style="font-weight:bold;">Sunrise and Sunset</span> <br/> </td> </tr> <tr> <td style="vertical-align:top; text-align:center;"> High <xsl:value-of select="TEMPERATURE/HIGH"/> deg C </td> <td style="vertical-align:top; text-align:center;"> Low <xsl:value-of select="TEMPERATURE/LOW"/> deg C <br/> </td> <td style="vertical-align:top;"> Sunrise : <xsl:value-of select="SUN/SUNRISE"/> <br/> </td> <td style="vertical-align:top;">Sunset : <xsl:value-of select="SUN/SUNSET"/> <br/> </td> </tr> <tr align="center"> <td style="vertical-align:top;" colspan="4"> <span style="font-weight:bold;">Weather Forecast</span> <br/> </td> </tr> <tr> <td style="vertical-align:top;" colspan="4"> <xsl:value-of select="FORECAST"/> </td> </tr> </tbody> </table> <br/> </body> </html> </xsl:template> </xsl:stylesheet>
|
|
列表 2 — WeatherStyle.xsl
参见下面给出的列表 3。该代码段显示了如何通过 Java 来使用 Oracle XDK 中的 XSL 处理器。
// Parse xsl and xml documents parser = new DOMParser(); parser.setPreserveWhitespace(true);
// Parse XSL file xslURL = createURL("WeatherStyle.xsl"); parser.parse(xslURL); xsldoc = parser.getDocument();
// Parse XML file xmlURL = createURL("Weather.xml"); parser.parse(xmlURL); xml = parser.getDocument();
// Instantiate a stylesheet XSLProcessor processor = new XSLProcessor(); processor.setBaseURL(xslURL); XSLStylesheet xsl = processor.newXSLStylesheet(xsldoc);
// Display any warnings that may occur processor.showWarnings(true); processor.setErrorStream(System.err); // Process XSL XMLDocumentFragment result = processor.processXSL(xsl, xml); // Print the transformed document FileOutputStream fout = new FileOutputStream("Weather.html"); result.print(fout); fout.flush(); fout.close();
|
|
列表3. Weather.java
这是通过浏览器查看时,经过转换的内容的样式。参见图 1。
|
天气预报
|
|
城市:Carlmont
|
州:加州 |
|
日期:2003 年 9 月 25 日
|
|
温度
|
日出和日落
|
|
最高 17 摄氏度
|
最低 8 摄氏度
|
日出:早上 6:45
|
日落:下午 6:40
|
|
天气预报
|
|
天空局部多云,预计中午有少量阵雨。今天的最高气温将为 15 摄氏度左右,最低气温将为 7 摄氏度左右。傍晚可能出现强西北风。夜间大部分晴朗无云。
|
- 通过右击相应的链接和选择保存目标选项来下载和将 Weather.xml , WeatherStyle.xsl 和 Weather.java 文件保存在任意方便的目录中。
随后,到下载这些文件的目录的路径将用 <CODE> 目录来表示。
- 在 Windows 中打开一个命令提示窗口,或在 Linux/UNIX 中打开一个 shell 窗口,并转至 <CODE> 目录。
- 确保您的 CLASSPATH 包含了 xmlparserv2.jar 文件。为此,编辑 CLASSPATH 项目并添加该文件。这个 jar 文件可以在 <XDK_HOME>/lib 目录中找到。这里,<XDK_HOME> 是您解压缩 Oracle XDK 9i /v10 软件的目录。
要在 Linux/UNIX 中添加 CLASSPATH 项目,执行: $ CLASSPATH=$CLASSPATH:/<XDK_HOME>/lib/xmlparserv2.jar $ export CLASSPATH
要在 Windows 中添加 CLASSPATH 项目,执行: > set CLASSPATH=%CLASSPATH%;<XDK_HOME>\lib\xmlparserv2.jar;
- 同样,添加 <JDK_HOME>/bin 目录到 PATH 环境变量中。这里,<JDK_HOME> 是您解压缩 JDK 软件的目录。
- 使用以下命令编译 Weather.java:
$javac Weather.java
- 现在,在命令提示符下使用以下命令来运行 Weather.class:
$java Weather
-
这将在当前目录中生成 Weather.html 文件。要查看该文件,在 Web 浏览器中打开它。
资源
总结
此方法文档说明了如何使用 Oracle XDK 中提供的 XSL 处理器来转换 XML 文档的格式。
|