dom4j对多个xml进⾏合并
当我们开发⼀些程序的时候,可能会⾃定义xml来对程序进⾏配置,但是只使⽤单个xml来配置可能会遇到⼀个问题,到后期有可能xml配置⽂件越来越⼤越来越长,⽐较难以维护,那就可以将单个xml⽂件按照情况进⾏拆分,启动的时候再将其合并。
注意如果有特殊字符⽤CDATA包装下,不然会初始化抛出异常(如下):
<a>
<![CDATA[这是有特殊字符的&⼀句话]]>
</a>
⽐如,有个配置的xml:
<?xml version="1.0" encoding="UTF-8"?>
<tube-router>
<other>xxx</other>
<flows>
........
</flows>
</tube-router>
其中在flows中可能有很多个flow节点,并且每个flow节点都很多内容,试想⼀下当flow很多个的时候那么就会让这个xml⽂件很难阅读,那么我们可以将⾥⾯的flow节点单独的配置出来。
如下:
<?xml version="1.0" encoding="UTF-8"?>
<tube-router>
<flow>flow02</flow>
</tube-router>
在程序启动的时候将上⾯的两个xml进⾏合并:
<?xml version="1.0" encoding="UTF-8"?>
<tube-router>
<other>xxx</other>
<flows>
<flow>flow02</flow>
</flows>
</tube-router>
下⾯是⼀个demo:
将上⾯的l和l合并到l中
xml⾥⾯的内容:
//l
<?xml version="1.0" encoding="UTF-8"?>
<tube-router>
<flow>flow01</flow>使用dom4j解析xml文件
</tube-router>
//l
<?xml version="1.0" encoding="UTF-8"?>
<tube-router>
<flow>flow02</flow>
</tube-router>
//l
<?xml version="1.0" encoding="UTF-8"?>
<tube-router>
<other>xxx</other>
<flows></flows>
</tube-router>
MainClass类:
public class MainClass {
public static void main(String[] args) throws DocumentException {
SAXReader saxReader = new SAXReader();
String classpath = Resource("/").getPath();
String tube = classpath + File.separator + "l";
Document rootDoc = ad(new File(tube));
Element parent = RootElement();
Element flows = parent.element("flows");
File file = new File(classpath);
if (ists()) {
File[] files = file.listFiles(new FileFilter() {
public boolean accept(File pathname) {
String fileName = Name();
String pattern = "^flow.*.xml$";
boolean matches = Pattern.matches(pattern, fileName);
return matches;
}
});
for (File f : files) {
Document read = ad(f);
List<Element> elements = Document().getRootElement().elements();
for (Element emt : elements) {
flows.add(emt.detach());
}
}
}
System.out.println(rootDoc.asXML());
}
}
运⾏结果如下:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论