2

假设一个类Output.java包含 6 个变量,其中 4 个变量数据存储在其中 database_A,2 个变量数据存储在database_B.

我的班级Delegate.java需要与两个不同的服务进行通信,Service_A.java它们Service_B.java会分别询问database_Adatabase_B获取各自的数据(database_A- 4 个变量,database_B- 2 个变量)。

Delegate.javaService_A.java/之间的通信Service_B.java采用 XML 请求/响应的形式。

因此Deleage.java将有两个 XML 作为响应,一个来自database_A(由 调用Service_A.java),一个来自database_b(由 调用Service_B.java)。

我想合并这两个 XML 文件并制作一个 XML 文件Final_xml,其中包含所有 6 个Output.java类变量的值。

4

2 回答 2

2

是的,它可以合并 xml 文件。您可以参考以下链接来合并您的文件。对以下链接的代码进行必要的更改以实现 XML 的结构。如果可能共享您的 XML 结构,将帮助您提供相关代码。

在 Java 中合并两个 XML 文件

使用java NodeList合并xml文件

于 2013-05-20T18:06:19.173 回答
-1

您可以将 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;
    }
}
于 2019-10-05T19:21:48.120 回答