快速业务通道

Java中的XML: Java文档模型的用法 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-20
imson DOM 顶级代码

1 // parse the document from input stream 2 System.setProperty("javax.xml.parsers.DocumentBuilderFactory", 3   "org.apache.crimson.jaxp.DocumentBuilderFactoryImpl"); 4 DocumentBuilderFactory dbf = DocumentBuilderFactoryImpl.newInstance(); 5 dbf.setNamespaceAware(true); 6 DocumentBuilder builder = dbf.newDocumentBuilder(); 7 Document doc = builder.parse(in); 8 // recursively walk and modify document 9 modifyElement(doc.getDocumentElement()); 10 // write the document to output stream 11 ((XmlDocument)doc).write(out);

清单 3 中的 Crimson DOM 示例代码使用了用于语法分析的 JAXP 接口。JAXP 为语法分析和转换 XML 文档提供了一个标准化的接口。本示例中的语法分析代码还可以用于 Xerces(对文档构建器类名称的特性设置有适当的更改)来替代较早给定的 Xerces 特定的示例代码。

在本示例中,我首先在第 2 行到第 3 行中设置系统特性来选择要构造的 DOM 表示的构建器工厂类(JAXP 仅直接支持构建 DOM 表示,不支持构建本文中讨论的任何其它表示)。仅当想选择一个要由 JAXP 使用的特定 DOM 时,才需要这一步;否则,它使用缺省实现。出于完整性起见,我在代码中包含了设置这个特性,但是更普遍的是将它设置成一个 JVM 命令行参数。

接着我在第 4 行到第 6 行中创建构建器工厂的实例,对使用那个工厂实例构造的构建器启用名称空间支持,并从构建器工厂创建文档构建器。最后(第 7 行),我使用文档构建器来对输入流进行语法分析并构造文档表示。

为了写出文档,我使用 Crimson 中内部定义的基本方法。不保证在 Crimson 未来版本中支持这个方法,但是使用 JAXP 转换代码来将文档作为文本输出的替代方法需要诸如 Xalan 那样的 XSL 处理器的。那超出了本文的范围,但是要获取详细信息,可以查阅 Sun 中的 JAXP 教程。

Java中的XML: Java文档模型的用法(3)

时间:2011-01-25 IBM Dennis M. Sosnoski

JDOM

使用 JDOM 的顶级代码比使用 DOM 实现的代码稍微简单一点。为构建文档表示(第 1-3 行),我使用带有由参数值禁止验证的 SAXBuilder 。通过使用提供的 XMLOutputter 类,将已修改的文档写入输出流同样简单(第 6-8 行)。

清单 4. JDOM 顶级代码

1 // parse the document from input stream 2 SAXBuilder builder = new SAXBuilder(false); 3 Document doc = builder.build(in); 4 // recursively walk and modify document 5 modifyElement(doc.getRootElement()); 6 // write the document to output stream 7 XMLOutputter outer = new XMLOutputter(); 8 outer.output(doc, out);

清单 5 中 JDOM 的 modify 方法也比 DOM 的同一方法简单。我获取包含元素所有内容的列表并扫描了这张列表,检查文本(象 String 对象那样的内容)和元素。这张列表是“活的”,所以我能直接对它进行更改,而不必调用父元素上的方法。

清单 5. JDOM modify 方法

1 protected void modifyElement(Element element) { 2  // loop through child nodes 3  List children = element.getContent(); 4  for (int i = 0; i < children.size(); i++) { 5   // handle child by node type 6   Object child = children.get(i); 7   if (child instanceof String) { 8    // trim whitespace from content text 9    String trimmed = child.toString().trim(); 10    if (trimmed.length

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号