在java中合并两个XML文件并生成单个XML
假设一个类在java中合并两个XML文件并生成单个XML,java,xml,merge,Java,Xml,Merge,假设一个类Output.java包含6个变量,其中4个变量数据存储在数据库a中,2个变量数据存储在数据库B中 我的班级Delegate.java需要与两个不同的服务服务A.java和服务B.java进行通信,这两个服务将分别要求数据库A和数据库B获取各自的数据(数据库A-4个变量,数据库B-2个变量) Delegate.java和Service\u A.java/Service\u B.java之间的通信是以XML请求/响应的形式进行的 因此Deleage.java将有两个XML作为响应,一个来
Output.java
包含6个变量,其中4个变量数据存储在数据库a
中,2个变量数据存储在数据库B
中
我的班级Delegate.java
需要与两个不同的服务服务A.java
和服务B.java
进行通信,这两个服务将分别要求数据库A
和数据库B
获取各自的数据(数据库A
-4个变量,数据库B
-2个变量)
Delegate.java
和Service\u A.java
/Service\u B.java
之间的通信是以XML请求/响应的形式进行的
因此Deleage.java
将有两个XML作为响应,一个来自database\u A
(由Service\u A.java
调用),另一个来自database\u b
(由Service\u b.java
调用)
我想合并这两个XML文件并生成一个XML文件
Final\u XML
,其中包含Output.java
类的所有6个变量的值。是的,可以合并XML文件。
您可以参考以下链接合并您的文件。对下面链接的代码进行必要的更改,以实现XML的结构。如果可能,共享XML的结构,将帮助您编写相关代码
可以将XML视为文本文件并将它们组合起来。与其他方法相比,这是非常快的。请查看以下代码:-
import java.io.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
public class XmlComb {
static Set<String> lstheader = new HashSet<String>();
public static void main(String[] args) throws IOException {
Map<String,List<String>> map1 = getMapXml("J:\\Users\\Documents\\XMLCombiner01\\src\\main\\resources\\File1.xml");
Map<String,List<String>> map2 = getMapXml("J:\\Users\\Documents\\XMLCombiner01\\src\\main\\resources\\File2.xml");
Map<String,List<String>> mapCombined = combineXML(map1, map2);
lstheader.forEach( lst -> {
System.out.println(lst);
});
try {
mapCombined.forEach((k,v) -> {
System.out.println(k);
v.forEach(val -> System.out.println(val));
});
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static Map<String,List<String>> combineXML(Map<String, List<String>> map1, Map<String, List<String>> map2 ) {
Map<String,List<String>> map2Modified = new TreeMap<String, List<String>>();
Map<String,List<String>> mapCombined = new TreeMap<String, List<String>>();
// --- Modifying map ---
for(String strKey2 : map2.keySet()) {
if(map1.containsKey(strKey2)) {
map2Modified.put(strKey2.split("\">")[0] + "_1\">", map2.get(strKey2));
}
else {
map2Modified.put(strKey2 , map2.get(strKey2));
}
}
//---- Combining map ---
map1.putAll(map2Modified);
return map1;
}
public static Map<String,List<String>> getMapXml(String strFilePath) throws IOException{
File file = new File(strFilePath);
BufferedReader br = new BufferedReader(new FileReader(file));
Map<String, List<String>> testMap = new TreeMap<String, List<String>>();
List<String> lst = null;
String st;
String strCatalogName = null;
while ((st = br.readLine()) != null) {
//System.out.println(st);
if(st.toString().contains("<TestCase")){
lst = new ArrayList<String>();
strCatalogName = st;
testMap.put(strCatalogName, lst);
}
else if(st.contains("</TestCase")){
lst.add(st);
testMap.put(strCatalogName,lst);
}
else {
if(lst != null){
lst.add(st);
}else {
lstheader.add(st);
}
}
}
return testMap;
}
}
import java.io.*;
导入java.util.ArrayList;
导入java.util.HashMap;
导入java.util.HashSet;
导入java.util.List;
导入java.util.Map;
导入java.util.Set;
导入java.util.TreeMap;
公共类XmlComb{
静态集合lstheeader=newhashset();
公共静态void main(字符串[]args)引发IOException{
Map map1=getMapXml(“J:\\Users\\Documents\\XMLCombiner01\\src\\main\\resources\\File1.xml”);
Map map2=getMapXml(“J:\\Users\\Documents\\XMLCombiner01\\src\\main\\resources\\File2.xml”);
Map mapCombined=combineXML(map1,map2);
lstheader.forEach(lst->{
系统输出打印项次(lst);
});
试一试{
mapCombined.forEach((k,v)->{
系统输出println(k);
v、 forEach(val->System.out.println(val));
});
}捕获(例外e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
公共静态映射组合XML(映射map1、映射map2){
Map map2Modified=new TreeMap();
Map mapCombined=新树映射();
//---修改地图---
for(字符串strKey2:map2.keySet()){
if(地图1.containsKey(strKey2)){
map2Modified.put(strKey2.split(“\”>”)[0]+“\u 1\”>”,map2.get(strKey2));
}
否则{
map2Modified.put(strKey2,map2.get(strKey2));
}
}
//----组合图---
map1.putAll(map2Modified);
返回map1;
}
公共静态映射getMapXml(字符串strFilePath)引发IOException{
文件=新文件(strFilePath);
BufferedReader br=新的BufferedReader(新文件读取器(文件));
Map testMap=newtreemap();
列表lst=null;
字符串st;
字符串strCatalogName=null;
而((st=br.readLine())!=null){
//系统输出打印LN(st);
如果(st.toString())包含("担心XML格式------------------感谢您的回复。我的目标是通过合并两个新的XML来实现当前\u XML的现有XML格式。可以肯定的是,当我合并这两个新的XML文件new1\u XML和new2\u XML时,我将获得现有\u XML文件所需的所有数据。但是提供相同的格式,这是非常重要的当前的xml对我来说似乎很难。好吧,我希望你能通过查看链接中的示例来解决格式化问题。谢谢Alpesh,我不想硬编码合并概念。我想写一些java代码,它将识别xml的节点和子节点,然后解析不常见的数据并将其放入new xml文件。之后,我将它与现有的一个xml文件合并。我能够使用DOM解析xml,但仍在努力寻找所需的解决方案。另请参阅: