首页 | 互联网 | IT动态 | IT培训 | Cisco | Windows | Linux | Java | .Net | Oracle | 软件测试 | C/C++ | 嵌入式开发 | 存储世界 | 服务器
网络设备 | IDC | 安全 | 求职招聘 | 数字网校 | 笔记本电脑 | 北大青鸟 | 技术专题 | 电子书下载 | 教学视频 | 源码下载 | 搜索 | 博客 | 论坛
中国IT实验室Linux频道
中国IT教育
Google
首页 资讯动态 认证考试 新手入门 核心技术 高级技术 J2EE J2ME Java&XML 开源技术 其他技术 RSS订阅 论坛 专题
您现在的位置: 中国IT实验室 >> Java >> 新手入门 >> 基础入门 >> 正文

使用SDO跟踪XML数据的变化

    四、通过一个不同的实体浏览数据的变化

    XML数据处理的第三部分需要完成两个任务:

    1. 程序需要按着编辑顺序打印出主要的信息。

    2. 显示处理阶段所有的修改记录。

    当我们可以更进一步根据着一个记录变化阶段编辑订购单时,这部分显示了如何使用ReviewPO.java调用所有的编辑记录。ReviewPO.java的代码如下:

  

 package com.company.sdo.po;
import java.io.FileInputStream;
import java.util.List;
import commonj.sdo.ChangeSummary;
import commonj.sdo.DataObject;
import commonj.sdo.helper.XMLDocument;
import commonj.sdo.helper.XMLHelper;
public class ReviewPO {
public static void main(String[] args) throws Exception {
Util.definePOTypes();
FileInputStream fis = new FileInputStream(Constants.PO_PROCESSED_XML);
//1. 装载要处理的订购单
          XMLDocument xmlDoc = XMLHelper.INSTANCE.load(fis);
DataObject purchaseOrder = xmlDoc.getRootObject();
//2.  显示被编辑的订购单的信息
          System.out.println();
System.out.println("---received purchase order information---");
System.out.println("Order date: " + purchaseOrder.get("orderDate"));
System.out.println("Order comment: " + purchaseOrder.get("comment"));
DataObject shipTo = purchaseOrder.getDataObject("shipTo");
System.out.println("Ship to name: ");
Util.printDataObject(shipTo,1);
DataObject billTo = purchaseOrder.getDataObject("billTo");
System.out.println("Bill to name: ");
Util.printDataObject(billTo,1);
DataObject items = purchaseOrder.getDataObject("items");
List itemList = items.getList("item");
System.out.println("Ordered items: ");
for (int i = 0; i < itemList.size(); i++) {
DataObject item = (DataObject) itemList.get(i);
System.out.println("\tItem " + (i+1) + " :" );
Util.printDataObject(item,2);
}
//3.  显示了第二阶段的数据变化
          System.out.println();
System.out.println("---review changes in purchase order ---");
ChangeSummary chngSum = purchaseOrder.getChangeSummary();
Util.printChangeSummary(chngSum);
//4.  取消第二阶段的所有变化
          System.out.println();
System.out.println("---action taken after reviewing the changes---");
System.out.println("\t###undo all changes###");
chngSum.undoChanges();
//5. 编辑订购单的原始版本
          System.out.println();
System.out.println("---changes made in purchase order review---");
chngSum.beginLogging();
billTo.set("name", "Alice Smith");
chngSum.endLogging();
//6.  将新的变化输出到系统控制台
          Util.printChangeSummary(chngSum);
//7.  将改变记录保存到一个XML文件中
          Util.storeXML(purchaseOrder,"purchaseOrder", Constants.PO_REVIEWED_XML);
}
}

    要注意的是第二个任务不同于在前一部分打印ChangeSummary,在这里printout是直接基于ChangeSummary的。变化细节在运行时被重新装载。我们可以通过比较这两个printout来分辨它们的不同。在上一部分,printDataObject()在删除项时什么都没产生,而是调用了printDeletedProperty()来列出它们的属性和它们的值。在当前的printout中,恰恰相反。

    在程序的其他部分,注释4通过调用undoChanges方法取消了在第二阶段的所有的变化,注释5对订购单做了一些小的变化。我们可以看看保存变化记录的文件(po_reviewed.xml)来验证这些操作结果。

上一页  [1] [2] [3] [4] 

【责编:Zenghui】

中国IT教育

相关产品和培训
文章评论
 友情推荐链接
 认证培训
 专题推荐

 ·C++箴言大合集
 ·开源框架 Structs 2.0入门教程
 ·诱人的奶酪 J2ME手机开发技术
 ·Oracle外键及外键约束修改行为
 ·开源软件测试工具学习专题
 ·JSP Web开发 入门基础到高手进阶教程
 ·JavaFX—是Java桌面的新希望么?
 ·安全至上 .NET开发安全策略
 ·测试用例设计之道-测试用例学习专题
 ·面向Java开发人员的Scala指南
 今日更新
 社区讨论
 博客论点
 频道精选
 Java 频道导航