邋遢居

我的Java天堂

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  61 Posts :: 2 Stories :: 90 Comments :: 0 Trackbacks

在开发过程中经常需要把一些配置文件进行合并。一般情况下这些配置文件都是使用xml格式进行存储的。对配置文件进行合并,说到底就变成了对xml的合并。

有了这样的需求就的好好想想有那些方案了。稍微的想了想(肯定不完整了)合并xml可行方案:

1、使用dom4jsaxxml解析工具对需要合并的xml代码进行分析、比较并合并。

<<Java中合并XML文档的设计与实现>>(http://fanqiang.chinaunix.net/program/html/2005-06-16/3313.shtml)一文就是采用的这种方式实现了。

2、采用xsltxml进行合并。

在这两个技术中,我是重点的看了一下第二种。原因是以前对xslt有一点了解,而且不用我自己去控制递规循环这样比较容易出错的环节。

还有就是使用 xslt 有很多很不错的调试环境可以使用如 xmlspy,stylus studio 等。可以直接看到调试过程。最后有幸在网上看到了一个老外写的一个用于合并 xml xslt http://www2.informatik.hu-berlin.de/~obecker/XSLT/#merge )。用 xmlspy 跑了一下,当时感觉就是一个“爽”了得。狂喜过后,就开始思考想想如何用 java 实现这个 xslt 的转换过程了。其实这也是一个很简单的过程。使用 dom4j 用下面的代码就可以实现:

public  Document styleDocument(

Document document,

String stylesheet

throws  Exception {

//  load the transformer using JAXP

TransformerFactory factory 
=  TransformerFactory.newInstance();

Transformer transformer 
=  factory.newTransformer(

new  StreamSource( stylesheet )

);

//  now lets style the given document

DocumentSource source 
=   new  DocumentSource( document );

DocumentResult result 
=   new  DocumentResult();

transformer.transform( source, result );

//  return the transformed document

Document transformedDoc 
=  result.getDocument();

return  transformedDoc;

}

就用这样的代码一跑,他居然,居然没有得到我想要的结果。郁闷啊!直接想去找块豆腐,一头撞死算了。但是在死前还是要把这个问题解决掉。要不死也不甘心。简单的分析一下,在xmlspy中可以使用,说明xslt肯定没有问题。那有问题的肯定是xslt 处理器有问题。你有问题我换不就的了吗。最后我换成了如下的情况:

< dependency >
      
< groupId > dom4j </ groupId >
      
< artifactId > dom4j </ artifactId >
      
< version > 1.6.1 </ version >
    
</ dependency >
    
< dependency >
      
< groupId > net.sf.saxon </ groupId >
      
< artifactId > saxon </ artifactId >
      
< version > 8.5.1 </ version >
    
</ dependency >
  
</ dependencies >

重新跑了一下,ok了。没有问题了。

下面的任务就是对这个功能进行简单的封装一下。然需要xml合并的地方能够很容易的调用他。



posted on 2006-08-23 17:21 Jet Geng 阅读(2241) 评论(0)  编辑  收藏 所属分类: 生活点滴

只有注册用户登录后才能发表评论。


网站导航: