Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中合并两个XML文件并生成单个XML_Java_Xml_Merge - Fatal编程技术网

在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,但仍在努力寻找所需的解决方案。另请参阅: