技术开发 频道

用 JDOM 简化 XML 编程



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

    JDOM 的一个有趣特征是和其它 API 有互操作性。使用 JDOM,不仅能把文档输出到 Stream 或 Reader ,还可将文档作为 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
相关文章