快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-20
riter(out); 14 recorder.setOutput(writer); 15 recorder.writeNode(doc); 16 writer.close();

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

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

因为使用 JAXP 接口,所以我必须首先创建分析器工厂的实例并在创建分析器实例之前启用名称空间处理(第 2-4 行)。一旦获取了分析器实例,我就能将输入设置到分析器中,并真正构建文档表示(第 5-8 行),但是这涉及比其它模型更多的步骤。

输出处理(第 11-16 行)也涉及比其它模型更多的步骤,主要因为 XPP 需要 Writer 而不是直接将 Stream 作为输出目标接受。

清单 11 中 XPP modify 方法尽管需要更多代码来创建新元素(第 13-21 行),但它与 JDOM 方法最类似。名称空间处理在这里有点麻烦。我首先必须创建元素的限定名称(第 15-16 行),然后创建元素,最后在稍后设置名称和名称空间 URI(第 18-21 行)。

清单 11. XPP modify 方法

1 protected void modifyElement(XmlNode element) throws Exception { 2  // loop through child nodes 3  for (int i = 0; i < element.getChildrenCount(); i++) { 4   // handle child by node type 5   Object child = element.getChildAt(i); 6   if (child instanceof String) { 7    // trim whitespace from content text 8    String trimmed = child.toString().trim(); 9    if (trimmed.length() == 0) { 10     // delete child if only whitespace (adjusting index) 11     element.removeChildAt(i--); 12    } else { 13     // construct qualified name for wrapper element 15     String prefix = element.getPrefix(); 16     String name = (prefix == null) ? "text" : (prefix + ":text"); 17     // wrap the trimmed content with new element 18     XmlNode text = m_parserFactory.newNode(); 19     text.appendChild(trimmed); 20     element.replaceChildAt(i, text); 21     text.modifyTag(element.getNamespaceUri(), "text", name); 22    } 23   } else if (child instanceof XmlNode) { 24    // handle child elements with recursive call 25    modifyElement((XmlNode)child); 26   } 27  } 28 }

结束语

DOM、 dom4j 和 Electric XML 都得到这些几乎同样易于使用的代码样本,其中 EXML 可能最简单,而 dom4j 受一些小条件限制而较困难。DOM 提供了与语言无关的非常实在的好处,但是如果你只使用 Java 代码,那么通过与 Java 特定的模型相比较,它看上去有点麻烦。我认为这表明 Java 特定的模型通常成功地实现简化 Java 代码中的 XML 文档处理这个目标。

超越基础:真实世界可用性

代码样本显示 JDOM 和 EXML 为基本文档操作(使用元素、属性和文本)提供了简单和清晰的接口。根据我的经验,它们的方法并不能很好地完成处理整个文档表示的编程任务。要完成这些类型的任务,DOM 和 dom4j 使用的组件方法 ― 其中从属性到名称空间的所有文档组件实现一些公共接口 ― 工作得更好。

相关的例子是最近我为 JDOM 和 dom4j 实现的 XML 流型(XML Streaming (XMLS) )编码。这个代码遍历整个文档并编码每个组件。JDOM 实现比 dom4j 实现复杂得多,主要是因为 JDOM 使用一些没有公共接口的独特类来表示每个组件。

因为 JDOM 缺少公共接口,所以即使处理 Document 对象的代码与处理 Element 对象的代码都有一

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号