新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> 本版讨论DOM, SAX, XPath等。
    [返回] 中文XML论坛 - 专业的XML技术讨论区XML.ORG.CN讨论区 - XML技术『 DOM/SAX/XPath 』 → [原创]对XML文档操作的通用CRUD(JDOM版) 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 9622 个阅读者浏览上一篇主题  刷新本主题   平板显示贴子 浏览下一篇主题
     * 贴子主题: [原创]对XML文档操作的通用CRUD(JDOM版) 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     jomper 帅哥哟,离线,有人找我吗?
      
      
      等级:大一(猛啃高等数学)
      文章:18
      积分:168
      门派:XML.ORG.CN
      注册:2004/8/23

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给jomper发送一个短消息 把jomper加入好友 查看jomper的个人资料 搜索jomper在『 DOM/SAX/XPath 』的所有贴子 引用回复这个贴子 回复这个贴子 查看jomper的博客楼主
    发贴心情 

    能不能让我 编辑一下原来的帖子,不然这样好郁闷.

    2.3 通用XMLDAO类的设计
    在这个类里一共有5个方法,它们将完成CRUD。(create、read、add、update、delete)
    2.3.1 create方法
     /**
      * 创建单个文档
      * @param file 目标输出文档路径
      * @param facade elements外观
      * @param builderType 获得构建器的类型
      */
     public void create(String file,Object facade,int builderType){
      doc = new Document();
      // Construts Element
      doc.addContent(BuilderFactory.getBuilder(builderType).addBuilder(false,facade));
      // Output
      OutputFactory.newJDOMOutput().outputXML(file,doc);
     }

    在这个方法里用BuilderFactory创建具体的UserInfoBuilder实例,实例类型由builderType决定。
    然后根据facade完成具体的Construts Element动作,并将返回的element添加到Document对象。

    2.3.2 add方法
     /**
      * 添加信息
      * @param file
      * @param userInfo
      * @param sc
      */
     public void add(String file,Object facade,int builderType,ServletContext sc){
      doc = (Document)InputFactory.newJDOMInput().inputXML(file,sc);

      doc.getRootElement().addContent(BuilderFactory.getBuilder(builderType).addBuilder(true,facade));
      OutputFactory.newJDOMOutput().outputXML(file,doc);

      if (logger.isDebugEnabled()) {logger.debug("add() - 数据添加完毕");}
     }

    add方法跟create方法的唯一区别就是在Construts element之前,需要读取需要修改的内容。
    至于ServletContext sc这个形式参数,大家不用理会,这个是用来从ParserPool获得XMLParser对象用的,直接设置为null就可以了,不会影响实际操作。


    其他的几个方法我就不一一叙述了,实在大同小异。根据前面的分析,完全可以理解。详情请看源码吧。

    2.4 facade对象到底是什么?
    从我给出的类图可以看到UserInfoFacade类。(facade外观模式,详情请参考《Thinking in Patterns With Java》)它的作用实际是作为其他三个DTO的外界接口,用来简化与外界的操作。
    细心的朋友还可能看到一个ElementDecorator类。(decorator装饰模式,详情请参考《Thinking in Patterns With Java》)这个是用来在ConcreteBuilder类里装饰ChildElement到元组Element。
    当然如果你的XML文档并不复杂可能你根本不需要这样一个facade对象,这时你完全可以用简单的DTO来替代它。

    3.0 适用范围
    实际上想在这个基础上添加对其他XML文档,只需要基于Builder接口写出具体ConcreteBuilder类和facade类或者简单DTO就可以了。
    所以它几乎是适用于绝大部分XML文档的。
    另外input和output留出了接口,想换成DOM4J也不麻烦。
    测试文件是 org.jomper.test.XMLDAOTest
    我只是抛砖引玉,写这个文档的主要目的是希望能在大家的批评和意见下一起完善它,来简化所有XML爱好者编程。这是我的邮箱jomper.cn@gmail.com


    4.0 参考文献
    [1] Wes Biggs & Harry Evans,用 JDOM 简化 XML 编程. IBM Java Technology .
    [2] Jason Hunter,JDOM Makes XML Easy.
    [3] Bruce Eckle,Thinking in Patterns With Java. 电子工业出版社.
    [4] Brett McLaughlin,Java Enterprise Best Practices.O'Reilly.


    关键词:
    元组元素: 元组元素相当于关系数据库里元组的概念,以一个元素来对应数据库里的一行数据。
    DTO: Data Transform Object 数据传递对象。在《J2EE设计模式》(P139)已经建议用这个概念来替代VO(Value Object)。


    下面是很多懒得看文档的人们喜欢的。
    源码下载:


    [此贴子已经被作者于2006-3-24 8:08:19编辑过]
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2006/3/23 22:45:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 DOM/SAX/XPath 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/5/23 6:04:52

    本主题贴数5,分页: [1]

     *树形目录 (最近20个回帖) 顶端 
    主题:  [原创]对XML文档操作的通用CRUD(JDOM版)(7223字) - jomper,2006年3月22日
        回复:  楼主好像少了一个包的文件.在你提供的原代码中少了一个文件.(60字) - cong3232,2006年5月11日
        回复:  [color=#FF0000]能不能让我 编辑一下原来的帖子,不然这样好郁闷.[/color]..(3100字) - jomper,2006年3月23日
        回复:  mark(4字) - malcolm,2006年3月23日
        回复:  嗯,不错,关注中。。。。。。(28字) - SATOKO2006,2006年3月23日

    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    103.516ms