技术开发 频道

用 JDOM 简化 XML 编程



与其它方法良好协作:和现有的 XML 工具进行互操作

    JDOM 的一个有趣特征是和其它 API 有互操作性。使用 JDOM,不仅能把文档输出到 StreamReader ,还可将文档作为 SAX Event Stream 或作为 DOM Document 。这种灵活性允许 JDOM 能在多种环境下使用或被添加到已经在使用另一种方法处理 XML 的系统中去。正如我们在后面一个示例中所看到的,它还允许 JDOM 使用其它的还不能识别 JDOM 的数据结构的 XML 工具。

JDOM 的另一个用处是它能够读取并操作现有的 XML 数据。使用 org.jdom.input 中的一个类可以阅读结构很规范的 XML 文件。在这个示例中我们使用 SAXBuilder


清单 12. 使用 SAXBuilder 对 XML 文件进行语法分析
try {
            SAXBuilder builder = new SAXBuilder();
            Document anotherDocument =
            builder.build(new File("/some/directory/sample.xml"));
            } catch(JDOMException e) {
            e.printStackTrace();
            } catch(NullPointerException e) {
            e.printStackTrace();
            }
            

您可以用清单 2 到清单 7 中显示的方法来操作通过这个过程建立的文档。

JDOM 的另一个实用应用程序将其与 Apache 的 Xalan 产品结合在一起(请参阅 参考资料)。使用上面的汽车示例,我们将为在线汽车经销商建立一个 Web 页面,显示特定汽车的详细信息。首先,假设我们上面建立的文档显示我们准备呈现给用户的汽车的信息。下一步,我们将把这个 JDOM Document 与一个 XSL 样式表结合起来并把 HTML 格式的结果输出到 servlet 的 OutputStream 上以便在用户的浏览器中显示。

在本例中,我们准备使用的 XSL 样式表被称为 car.xsl


清单 13. 用于将汽车记录转换为 HTML 的 XSL 文档
<?xml version="1.0" encoding="UTF-8"?>
            <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
            <xsl:template match="/car">
            <html>
            <head>
            <title><xsl:value-of select="make"/> <xsl:value-of select="model"/>
            </head>
            <body>
            <h1><xsl:value-of select="make"/></h1><br />
            <h2><xsl:value-of select="model"/></h2><br />
            <table border="0">
            <tr><td>VIN:</td><td><xsl:value-of select="@vin"/></td></tr>
            <tr><td>Year:</td><td><xsl:value-of select="year"/></td></tr>
            <tr><td>Color:</td><td><xsl:value-of select="color"/></td></tr>
            </table>
            </body>
            </html>
            </xsl:template>
            </xsl:stylesheet>
            

现在我们将把 org.jdom.Document 转换为 DOM Document ,并将其与显示我们的 XSL 和 OutputStream 的文件一起提供给 Xalan, OutputStream 是我们从我们假定的使用 servlet(如清单 14 所示)的应用服务器上获取的。


清单 14. 使用 JDOM 和 Xalan 创建 HTML 文档
TransformerFactory tFactory = TransformerFactory.newInstance();
            // Make the input sources for the XML and XSLT documents
            org.jdom.output.DOMOutputter outputter = new org.jdom.output.DOMOutputter();
            org.w3c.dom.Document domDocument = outputter.output(myDocument);
            javax.xml.transform.Source xmlSource =
            new javax.xml.transform.dom.DOMSource(domDocument);
            StreamSource xsltSource =
            new StreamSource(new FileInputStream("/some/directory/car.xsl"));
            // Make the output result for the finished document using
            // the HTTPResponse OutputStream
            StreamResult xmlResult = new StreamResult(response.getOutputStream());
            // Get a XSLT transformer
            Transformer transformer = tFactory.newTransformer(xsltSource);
            // Do the transform
            transformer.transform(xmlSource, xmlResult);
            

    在这个示例中,输出是通过 Java servlet 的 HTTPResponse OutputStream 流出。然而,输出流可以象早期的使用 XMLOutputter 的实例一样简单的通过文件流输出。我们使用 DOMOutputter 为 Xalan 生成 XML 源代码。但是我们可以生成相同的输出,方法是使用 XMLOutputter 将我们的 XML 文档作为 String 输出并使其进入 StreamSource 。说到灵活性:JDOM 可将它的结构作为 String 、SAX Event Stream 或 DOM Document 输出。这允许 JDOM 与能把任何这些模型作为输入的工具一起工作。(关于附加功能,请访问 JDOM Web 站点的 contrib 包,在那里您将发现一个基于 JDOM 工具的宝库,可提供基于 JDBC ResultSet 的构建器、XPATH 实现方法和其它更多工具。)

    在短短几行代码中,JDOM 启用了许多功能,我们已经在 XML 中分析过并有计划地创建了 XML 文档,操作了那些文档,并使用它们产生 XML 驱动的 Web 页面。

0
相关文章