快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-20
() == 0) { 11     // delete child if only whitespace (adjusting index) 12     children.remove(i--); 13    } else { 14     // wrap the trimmed content with new element 15     Element text = new Element("text", element.getNamespace()); 16     text.setText(trimmed); 17     children.set(i, text); 18    } 19   } else if (child instanceof Element) { 20    // handle child elements with recursive call 21    modifyElement((Element)child); 22   } 23  } 24 }

创建新元素的技术(第 14-17 行)非常简单,而且与 DOM 版本不同,它不需要访问父文档。

dom4j

dom4j 的顶级代码比 JDOM 的稍微复杂些,但是它们的代码行非常类似。这里的主要区别是我保存了用来构建 dom4j 文档表示的 DocumentFactory (第 5 行),并在输出已修改的文档文本之后刷新了 writer(第 10 行)。

清单 6. dom4j 的顶级代码

1 // parse the document from input stream 2 SAXReader reader = new SAXReader(false); 3 Document doc = reader.read(in); 4 // recursively walk and modify document 5 m_factory = reader.getDocumentFactory(); 6 modifyElement(doc.getRootElement()); 7 // write the document to output stream 8 XMLWriter writer = new XMLWriter(out); 9 writer.write(doc); 10 writer.flush();

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

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

正如您在清单 6 中看到的,dom4j 使用一个工厂方法来构造文档表示(从语法分析构建)中包含的对象。根据接口来定义每个组件对象,所以实现其中一个接口的任何类型的对象都能包含在表示中(与 JDOM 相反,它使用具体类:这些类在某些情况中可以划分子类和被继承,但是在文档表示中使用的任何类都需要以原始 JDOM 类为基础)。通过使用不同工厂进行 dom4j 文档构建,您能获取不同系列的组件中构造的文档。

在样本代码(第 5 行)中,我检索了用于构建文档的(缺省)文档工厂,并将它存储在一个实例变量( m_factory )中以供 modify 方法使用。并不严格需要这一步 — 可以在一个文档中同时使用来自不同工厂的组件,或者可以绕过工厂而直接创建组件的实例 — 但在该例中,我只想创建与在文档其余部分中使用的同一类型的组件,并且使用相同的工厂来确保完成这个步骤。

清单 7. dom4j modify 方法

1 protected void modifyElement(Element element) { 2  // loop through child nodes 3  List children = element.content(); 4  for (int i = 0; i < children.size(); i++) { 5   // handle child by node type 6   Node child = (Node)children.get(i); 7   if (child.getNodeType() == Node.TEXT_NODE) { 8    // trim whitespace from content text 9    String trimmed = child.getText().trim(); 10    if (trimmed.length() == 0) { 11     // delete child if only whitespace (adjusting index) 12     children.remove(i--); 13    } else { 14     // wrap the trimmed content with new element 15     Element text = m_factory.createElement 16      (QName.get("text", element.getNamespace())); 17     text.addText(trimmed); 18     children.set(i, text); 19    } 20   } 

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