摘 要:介绍了XML应用中合并XML文档的方法与应用,在基于XML的应用中,有着广泛的应用前景。
关键词:XML文档 解析器 元素
在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 java.util. *; //Java基础包,包含各种标准数据结构操作 Import javax.xml.parsers. *; //XML解析器接口 Import org.w3c.dom. *; //XML的DOM实现 import org.apache.crimson.tree.XmlDocument;//写XML文件要用到 Import javax.xml.transform. *; Import javax.xml.transform.dom. *; Import javax.xml.transform.stream. *; |
下面介绍合并XML文档的过程。先说明一下各个方法的作用。方法is Merging()有两个参数(分别是目标XML文件名和被合并的XML文件名),调用JAVA的解析器,获得两个要合并的XML文档的Document结构和根元素,并调用方法duplicate()和方法write To()。当然,在XML文档的合并过程中,可以加入另外的一些判断条件,比如,当被合并XML文档不存在时,将如何处理,等等。
Private Boolean is Merging (String mainFileName, String sub Filename) throws Exception { Boolean isOver = false; DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); Document Builder db = null; Try { Db = dbf.newDocumentBuilder (); } Catch (ParserConfigurationException pce) { System.err.println(pce); //出现异常时,输出异常信息 } Document doc_main = null,doc_vice = null; //获取两个XML文件的Document。 Try { Doc_main = db.parse (mainFileName); Doc_vice = db.parse (sub Filename); } Catch (DOM Exception dom) { System.err.println (dom.getMessage ()); } Catch (Exception ioe) { System.err.println (ioe); } //获取两个文件的根元素。 Element root_main = doc_main.getDocumentElement (); Element root_vice = doc_vice.getDocumentElement (); //下面添加被合并文件根节点下的每个元素 Novelist message Items = root_vice.getChildNodes (); Int item_number = messageItems.getLength (); //如果去掉根节点下的第一个元素,比如<所属管理系统> ,那么i从3开始。否则i从1开始。 For (int i=1; i < item_number; i=i+2 ) { //调用dupliate(),依次复制被合并XML文档中根节点下的元素。 Element messageItem = (Element) messageItems.item (i); IsOver = dupliate (doc_main, root_main, messageItem); } //调用 write To(),将合并得到的Document写入目标XML文档。 Boolean isWritten = write To (doc_main, mainFileName); Return isOver && isWritten; } |
方法dupliate ()有三个参数(分别是目标XML文档的Document,目标XML文档中要添加节点的父节点和被合并XML文档的复制节点),采用递归的形式,将一个XML文档中的元素复制到另一个XML文档中。
Private Boolean dupliate (Document doc_dup, Element father, Element son) throws Exception { Boolean is done = false; String son_name = son.getNodeName (); Element sub ITEM = doc_dup.createElement (son_name); //复制节点的属性 If (son.hasAttributes ()){ NamedNodeMap attributes = son.getAttributes (); For (int i=0; i < attributes.getLength () ; i ++){ String attribute_name = attributes. Item (i). GetNodeName (); String attribute_value = attributes. Item (i). GetNodeValue (); SubITEM.setAttribute (attribute_name, attribute_value); } } Father.appendChild (sub ITEM); //复制节点的值 Text value son = (Text) son.getFirstChild (); String nodevalue_root = ""; If (value_son! = null && value_son.getLength () > 0) nodevalue_root = (String) value_son.getNodeValue (); Text valuenode_root = null; If ((nodevalue_root! = null)&&(nodevalue_root.length () > 0)) valuenode_root = doc_dup.createTextNode (nodevalue_root); If (valuenode_root! = null && valuenode_root.getLength () > 0) subITEM.appendChild (valuenode_root); //复制子结点 Novelist sub_messageItems = son.getChildNodes (); int sub_item_number = sub_messageItems.getLength(); if (sub_item_number < 2){ //如果没有子节点,则返回 Is done = true; } Else { For (int j = 1; j < sub_item_number; j=j+2) { //如果有子节点,则递归调用本方法 Element sub_messageItem = (Element) sub_messageItems.item (j); Is done = dupliate (doc_dup, subITEM, sub_messageItem); } } Return is done; } |
方法writeTo()有两个参数(分别是目标XML文档的Document和文件名),将所得目标XML文档写入文件。
Private Boolean write To (Document doc, String fileName) throws Exception { Boolean isOver = false; DOM Source doms = new DOM Source (doc); File f = new File (fileName); Stream Result sr = new Stream Result (f); Try { Transformer Factory tf=TransformerFactory.newInstance (); Transformer t=tf.newTransformer (); Properties properties = t.getOutputProperties (); Properties.setProperty (OutputKeys.ENCODING,"GB2312"); T.setOutputProperties (properties); T.transform (doms, sr); IsOver = true; } Catch (TransformerConfigurationException tce) { Tce.printStackTrace (); } Catch (Transformer Exception te) { Te.printStackTrace (); } Return isOver; } |
最后使用测试函数进行测试。对于两个已经存在的XML文件(比如,存在文件D:/a.xml和D:/b.xml,要将b.xml合并到a.xml中),可以测试如下:
Public static void main (String [] args) throws Exception { Boolean is done = is Merging ("D:/a.xml","D:/b.xml"); If (is Done) System.out.println ("XML files have been merged."); Else System.out.println ("XML files have NOT been merged."); } |
总结 本文介绍了如何利用JAVA中的XML解析器,合并两个XML文档。当然,在合并的过程中,还可以加入其他的约束条件,比如要求过滤掉特定的元素等。另外,复制元素的插入位置也可以加以限制。
<!--广告代码开始--><script type="text/javascript">
var ad_cid;
if (window.location.search.substring(1) != "")
{
ad_cid = window.location.search.substring(1);
} else {
ad_cid = 412;
}
</script><!--小通栏:c-scolumn顶部500*90-->
<script language="JavaScript" type="text/javascript">
document.getElementById("ad1").innerHTML=document.getElementById("span_ad1").innerHTML;
document.getElementById("span_ad1").innerHTML="";
</script><!--c-pip文章正文中间240*200-->
<script type="text/javascript">
if(document.getElementById("contentAdv")) {
document.getElementById("contentAdv").innerHTML=document.getElementById("span_ad3").innerHTML;
document.getElementById("span_ad3").innerHTML="";
} else {
document.getElementById("ad3").innerHTML=document.getElementById("span_ad3").innerHTML;
document.getElementById("span_ad3").innerHTML="";
}</script><!--c-text-1“您现在的位置”右侧文字-->
<script language="JavaScript" type="text/javascript">
document.getElementById("ad2").innerHTML=document.getElementById("span_ad2").innerHTML;
document.getElementById("span_ad2").innerHTML="";
</script><!--c-column-2“标题”上面的广告-->
<script language="JavaScript" type="text/javascript">
document.getElementById("ad10").innerHTML=document.getElementById("span_ad10").innerHTML;
document.getElementById("span_ad10").innerHTML="";
</script><!--c-column-1“摘要”下面的广告-->
<script language="JavaScript" type="text/javascript">
document.getElementById("ad9").innerHTML=document.getElementById("span_ad9").innerHTML;
document.getElementById("span_ad9").innerHTML="";
</script><!--广告代码结束-->
<iframe src="http://media.yesky.com/adjs/iframe-column/imp7.htm" frameborder="0" width="0" scrolling="no" height="0"></iframe>
<script language="JavaScript1.1" src="http://pagead2.googlesyndication.com/pagead/ads?client=ca-chinabyte_js&dt=1175331407125&hl=zh-CN&gl=CN&adsafe=high&oe=gb&lmt=1175331407&num_ads=3&output=js&channel=soft&url=http%3A%2F%2Fdev.yesky.com%2F490%2F2013490.shtml&ref=http%3A%2F%2Fdev.yesky.com%2Fjavagaoji%2Fxml%2F&cc=100&u_h=768&u_w=1024&u_ah=738&u_aw=1024&u_cd=16&u_tz=480&u_java=true" type="text/javascript"></script>
分享到:
相关推荐
Java DOM 生成XML,对基本的DOM又封装了一层,使操作XML更简单
7、将多个PDF(D:\\zhouyl\\FYImagePdf文件,D:\\zhouyl\\BTImagePDF文件)合并生成一个PDF文件:D:\\zhouyl\\合并MergePDF.pdf 二、用Java语言(Dom4j)完成了以下XMLToVds、TxtToVDS功能: 项目文件为TxtToVDS....
java实现word的合并,jdk版本1.7,直接导入eclipse中即可。基于docx4j3.3.3实现。内含所有jar包,MargeDoc中含有主方法
通过xsl合并2个结构相同的xml文件成为一个
1.8.1 在xml文档中引入dtd 18 1.8.2 dtd的结构 21 1.9 有效的xml 35 1.10 xml处理器/解析器 35 1.11 小结 36 第2章 xml名称空间 38 2.1 声明名称空间 38 2.2 名称空间在元素和属性中的运用 39 2.2.1 名称...
DOM4j操作xml文件DOM4j操作xml文件DOM4j操作xml文件DOM4j操作xml文件DOM4j操作xml文件DOM4j操作xml文件DOM4j操作xml文件DOM4j操作xml文件
(2)SQL查询生成XML文档模块 7.系统设计总结 六、系统测试与应用 1.测试环境 2.测试说明 (1)系统设计说明 (2)测试数据库数据格式说明 3.测试系统的设计和实现 (1)客户端 (2)服务器端 (3)数据字典的建立 (4)系统...
1.8.1 在xml文档中引入dtd 18 1.8.2 dtd的结构 21 1.9 有效的xml 35 1.10 xml处理器/解析器 35 1.11 小结 36 第2章 xml名称空间 38 2.1 声明名称空间 38 2.2 名称空间在元素和属性中的运用 39 2.2.1 名称...
1.8.1 在xml文档中引入dtd 18 1.8.2 dtd的结构 21 1.9 有效的xml 35 1.10 xml处理器/解析器 35 1.11 小结 36 第2章 xml名称空间 38 2.1 声明名称空间 38 2.2 名称空间在元素和属性中的运用 39 2.2.1 名称...
Java实现HTTP连接与浏览,Java源码下载,输入html文件地址或网址,显示页面和HTML源文件,一步步的实现过程请下载本实例的Java源码,代码中包括丰富的注释,对学习有帮助。 Java实现的FTP连接与数据浏览程序 1个...
1.8.1 在xml文档中引入dtd 18 1.8.2 dtd的结构 21 1.9 有效的xml 35 1.10 xml处理器/解析器 35 1.11 小结 36 第2章 xml名称空间 38 2.1 声明名称空间 38 2.2 名称空间在元素和属性中的运用 39 2.2.1 名称...
Java实现HTTP连接与浏览,Java源码下载,输入html文件地址或网址,显示页面和HTML源文件,一步步的实现过程请下载本实例的Java源码,代码中包括丰富的注释,对学习有帮助。 Java实现的FTP连接与数据浏览程序 1个...
Java实现HTTP连接与浏览,Java源码下载,输入html文件地址或网址,显示页面和HTML源文件,一步步的实现过程请下载本实例的Java源码,代码中包括丰富的注释,对学习有帮助。 Java实现的FTP连接与数据浏览程序 1个...
Java实现HTTP连接与浏览,Java源码下载,输入html文件地址或网址,显示页面和HTML源文件,一步步的实现过程请下载本实例的Java源码,代码中包括丰富的注释,对学习有帮助。 Java实现的FTP连接与数据浏览程序 1个...
Java实现HTTP连接与浏览,Java源码下载,输入html文件地址或网址,显示页面和HTML源文件,一步步的实现过程请下载本实例的Java源码,代码中包括丰富的注释,对学习有帮助。 Java实现的FTP连接与数据浏览程序 1个...
Java实现HTTP连接与浏览,Java源码下载,输入html文件地址或网址,显示页面和HTML源文件,一步步的实现过程请下载本实例的Java源码,代码中包括丰富的注释,对学习有帮助。 Java实现的FTP连接与数据浏览程序 1个...
1.功能:该API为适用于Java平台下,通过后端程序代码调用API接口操作Excel文档。通过方法可实现如下功能: 1.1 文档格式转换:Excel转PDF/图片/HTML/XPS/SVG/XML/CSV/TIFF/ET/ETT/OFD/、XML转Excel等。 1.2 文档...
Java从网络取得文件 1个目标文件 简单 Java从压缩包中提取文件 1个目标文件 简单 Java存储与读取对象 1个目标文件 如题 Java调色板面板源代码 1个目标文件 摘要:Java源码,窗体界面,调色板 使用Java语言编写的一款...
它是Java API,用于将使用MS Office(docx)或OpenOffice(odt),LibreOffice(odt)创建的XML文档与Java模型进行合并,以生成报告并将报告转换为其他格式(PDF,XHTML ...)。 请阅读样品和演示您可以测试我们的...