当前位置:首页 > 全部子站 > IT > 思科认证

Java中合并XML文档的设计与实现

来源:长理培训发布时间:2017-12-21 14:52:46

 百度广告

  在XML应用中,最常用也最实用的莫过于XML文件的读写。由于XML语义比较严格,起始标记必须配对,所以合并XML文档并不像合并普通文件那样简单。在Java中,如何合并XML文档,下面介绍一种方法。

  设计思想

  应用javax.xml.parsers包中的解析器解析得到两个XML文件的根元素,再采用递归的方式逐一复制被合并文件的元素。

 

 

  实现过程

  为了读写XML文件,需要导入如下JAVA包,"//"后为注释说明,笔者的环境是JDK 1.3.1,在JDK 1.4.0中测试也通过。

 

Import java.io. *; //Java基础包,包含各种IO操作 
Import javax.xml.parsers. *; //XML解析器接口 
import org.apache.crimson.tree.XmlDocument;//写XML文件要用到
Import javax.xml.transform.dom. *;

  下面介绍合并XML文档的过程。先说明一下各个方法的作用。方法is Merging()有两个参数(分别是目标XML文件名和被合并的XML文件名),调用JAVA的解析器,获得两个要合并的XML文档的Document结构和根元素,并调用方法duplicate()和方法write To()。当然,在XML文档的合并过程中,可以加入另外的一些判断条件,比如,当被合并XML文档不存在时,将如何处理,等等。

 

Private Boolean is Merging (String mainFileName, String sub Filename) throws Exception {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
Try {
} Catch (ParserConfigurationException pce) {
}
//获取两个XML文件的Document。
Doc_main = db.parse (mainFileName);
} Catch (DOM Exception dom) {
} Catch (Exception ioe) {
}
Element root_main = doc_main.getDocumentElement ();
//下面添加被合并文件根节点下的每个元素
Int item_number = messageItems.getLength ();
For (int i=1; i < item_number; i=i+2 ) {
Element messageItem = (Element) messageItems.item (i);
}
Boolean isWritten = write To (doc_main, mainFileName);
}

  方法dupliate ()有三个参数(分别是目标XML文档的Document,目标XML文档中要添加节点的父节点和被合并XML文档的复制节点),采用递归的形式,将一个XML文档中的元素复制到另一个XML文档中。

 

Private Boolean dupliate (Document doc_dup, Element father, Element son) throws Exception {
String son_name = son.getNodeName ();
//复制节点的属性
NamedNodeMap attributes = son.getAttributes ();
String attribute_name = attributes. Item (i). GetNodeName ();
SubITEM.setAttribute (attribute_name, attribute_value);
}
//复制节点的值
String nodevalue_root = "";
0) nodevalue_root = (String) value_son.getNodeValue ();
If ((nodevalue_root! = null)&&(nodevalue_root.length () > 0)) valuenode_root = doc_dup.createTextNode (nodevalue_root);
0) subITEM.appendChild (valuenode_root);
Novelist sub_messageItems = son.getChildNodes ();
if (sub_item_number < 2){
Is done = true;
Else {
//如果有子节点,则递归调用本方法 
Is done = dupliate (doc_dup, subITEM, sub_messageItem);
}
}

  方法writeTo()有两个参数(分别是目标XML文档的Document和文件名),将所得目标XML文档写入文件。|||

 

Private Boolean write To (Document doc, String fileName) throws Exception {
DOM Source doms = new DOM Source (doc);
Stream Result sr = new Stream Result (f);
{
Transformer t=tf.newTransformer ();
Properties.setProperty (OutputKeys.ENCODING,"GB2312");
T.transform (doms, sr);
}
{
}
{
}
}

  最后使用测试函数进行测试。对于两个已经存在的XML文件(比如,存在文件D:/a.xml和D:/b.xml,要将b.xml合并到a.xml中),可以测试

 

Public static void main (String args) throws Exception {
If (is Done) System.out.println ("XML files have been merged.");
}

  总结

介绍了如何利用JAVA中的XML解析器,合并两个XML文档。当然,在合并的过程中,还可以加入其他的约束条件,比如要求过滤掉特定的元素等。另外,复制元素的插入位置也可以加以限制。

 

责编:罗莉

发表评论(共0条评论)
请自觉遵守互联网相关政策法规,评论内容只代表网友观点,发表审核后显示!

国家电网校园招聘考试直播课程通关班

  • 讲师:刘萍萍 / 谢楠
  • 课时:160h
  • 价格 4580

特色双名师解密新课程高频考点,送国家电网教材讲义,助力一次通关

配套通关班送国网在线题库一套

课程专业名称
讲师
课时
查看课程

国家电网招聘考试录播视频课程

  • 讲师:崔莹莹 / 刘萍萍
  • 课时:180h
  • 价格 3580

特色解密新课程高频考点,免费学习,助力一次通关

配套全套国网视频课程免费学习

课程专业名称
讲师
课时
查看课程
在线题库
面授课程更多>>
图书商城更多>>
在线报名
  • 报考专业:
    *(必填)
  • 姓名:
    *(必填)
  • 手机号码:
    *(必填)
返回顶部