同时读取两个XML文件,如果需要把一个XML 文件中的某个特定元素的内容插入到另外一个XML文件中时,要用importNode()方法,具体使用例子如下:

import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;import org.apache.commons.lang.StringUtils;
import org.apache.tools.ant.Task;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.EntityResolver;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;/*@author:duanqf*/
public class MergeBeanRefContext {private static Element sourceRoot;private static Element destRoot;private static Document sourceDoc;private static Document destDoc;public static void merge(String sourceXmlPath, String destXmlPath, Task task) {DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();try {factory.setIgnoringElementContentWhitespace(true);DocumentBuilder db = factory.newDocumentBuilder();db.setEntityResolver(new EntityResolver() {public InputSource resolveEntity(String publicId,String systemId) throws SAXException, IOException {if (publicId!=null && publicId.equals("-//SPRING//DTD BEAN//EN")) {return new InputSource(new ByteArrayInputStream("<?xml version='1.0' encoding='GBK'?>".getBytes()));   }return null;}});sourceDoc = db.parse(new File(sourceXmlPath));sourceRoot = sourceDoc.getDocumentElement();destDoc = db.parse(new File(destXmlPath));destRoot = destDoc.getDocumentElement();execute(sourceDoc, destDoc, sourceRoot, destRoot, destXmlPath, task);} catch (Exception e) {e.printStackTrace();}}private static void execute(Document sourceDoc, Document destDoc,Element sourceRoot, Element destRoot, String destXmlPath, Task task) {Node constructorListNode = ParseXmlTools.selectSingleNode("/beans/bean[@id='qfContext']/constructor-arg/list",destRoot);NodeList destList = ParseXmlTools.selectNodes("value",constructorListNode);NodeList sourceList = ParseXmlTools.selectNodes("/beans/bean[@id='qfContext']/constructor-arg/list/value",sourceRoot);Map destPatternsMap = new HashMap();for (int j = 0; j < destList.getLength(); j++) {Node value = destList.item(j);if (value != null) {String valueStr = value.getTextContent();if (StringUtils.isNotBlank(valueStr)) {valueStr = valueStr.trim();destPatternsMap.put(valueStr, value);}}}for (int j = 0; j < sourceList.getLength(); j++) {Node value = sourceList.item(j);if (value != null) {String valueStr = value.getTextContent();if (destPatternsMap.get(valueStr) == null) {Node temp = destDoc.importNode(value, true);constructorListNode.appendChild(temp);// task.log("Add qfContext bean constructor-arg value:"// + valueStr);}}}//ParseXmlTools.saveXml(destXmlPath, destDoc);}

w3c dom操作Xml时从加入另一个XML文件的一个元素相关推荐

  1. W3C DOM操作之创建新节点

    DOM树 vs  DisplayList显示列表 两个很相似的东西,关于显示列表的教程看flash里吧,这里主要看看如何使用js操作DOM树 1.为DOM树添加节点,首先得创建一个 DOM的节点有2个 ...

  2. 加速Javascript:DOM操作优化

    原文:<Speeding up JavaScript: Working with the DOM> 作者: KeeKim Heng, Google Web Developer 在我们开发互 ...

  3. js-day06-jQuery事件和DOM操作-练习题

    jQuery事件绑定 js中绑定事件,三种方式: 方式1: 直接在元素上,增加onXxx事件属性. <button οnclick="alert(1);">点我< ...

  4. 浅谈dom操作removechild()

    浅谈dom操作removechild() 作为一个从ui设计转向前端的小白,之前一直是在对自己设计的界面写html和css,极少去写js,刚刚把盒子模型和响应式布局这一块的东西有了一点理解,又开始学习 ...

  5. 原生js和jquery常用的DOM操作

    前言 将原生JS和jquery里面的DOM操作进行了一下整理,方便以后温习. 创建元素节点 1.原生: document.createElement("div") 2.jquery ...

  6. java使用org.w3c.dom解析XML文档,创建、增删查改,保存,读取,遍历元素等操作

    全栈工程师开发手册 (作者:栾鹏) java教程全解 java使用org.w3c.dom(java dom)解析XML文档,创建.增删查改,保存,读取,遍历元素等操作 在保存文件时需要载入crimso ...

  7. java w3c xml_org.w3c.dom(java dom)解析XML文档

    首先来了解点Java DOM 的 API: 1.解析器工厂类:DocumentBuilderFactory 创建的方法:DocumentBuilderFactory dbf = DocumentBui ...

  8. 用“XML解析开发包Jaxp”对XML文件进行Dom方式的CRUD操作

    IT程序员开发必备-各类资源下载清单,史上最全IT资源,个人收藏总结! package edu.jaxp; import java.io.FileNotFoundException; import j ...

  9. Java之XML解析-使用dom(org.w3c.dom)解析XML

    转自: Java之XML解析-使用dom(org.w3c.dom)解析XML 下文笔者将讲述使用W3C(org.w3c.dom)提供的接口,解析XML文档的方法分享 W3C解析xml文档的方法:将整个 ...

最新文章

  1. facebook新无监督论文-Unsupervised Learning of Visual Features by Contrasting Cluster Assignments
  2. python时间序列因果检验_Python Statsmodels的时间序列Ljung_Box检验
  3. 机器学习常用算法(LDA,CNN,LR)原理简述
  4. [常用类]Scanner 类
  5. 动态sql语句返回值
  6. html整个项目怎么导出来,怎样将jquery导入web项目中?
  7. 在64位Win7系统中配置jsp开发环境以及一些问题解决方案
  8. UrlRewrite(Url重写技术)
  9. 如何实现 C/C++ 与 Python 的通信?
  10. #1064 - You have an error in your SQL syntax; version for the right syntax to use near '' at line
  11. 基础集群部署 - kubernetes-simple
  12. 微信公众号点击图片跳转关注
  13. 一种跨平台的C/C++动态库的符号隐藏方式
  14. 世界强大的移动便携图形工作站介绍
  15. 全民一起玩Python 之 基础篇视频教程
  16. Appium+python自动化(二十一)- 让猴子按你指令大闹手机,让我们都成为耍猴高手(超详解)...
  17. 高工指数首发,德赛西威/哈曼/比亚迪「领衔」智能车机TOP10
  18. 做数据必知的十本书,你读过几本?
  19. Office快捷键大全之二(Excel快捷键)
  20. 国际禁毒日 | 和TcaplusDB一起向毒品say NO!

热门文章

  1. 【转载】大叔推荐博客索引
  2. 20169217 《Linux内核原理与分析》第七周作业
  3. 软件分类:自由软件、开放源代码软件、公共软件、私有软件、版权所无软件...
  4. redis实现数据库(一)
  5. Leetcode-998 Maximum Binary Tree II(最大二叉树 II)
  6. 【转】Linux系统编程---dup和dup2详解
  7. Codeforces Round #243 (Div. 1)——Sereja and Squares
  8. 【转】汇总:LDA理论、变形、优化、应用、工具库
  9. celery开发中踩的坑
  10. 阿里云容器服务cni网络插件terway非官方网络性能测试