【问题标题】:Merge multiple xml files using java nodelist使用java nodelist合并多个xml文件
【发布时间】:2014-05-27 03:39:23
【问题描述】:

使用节点列表合并多个 xml 文件,我在下面的代码中使用,但它的输出文件有重复(重复)值。

xml文件文件夹结构如下图

                 c:|--20140525214726/search.xml
                   |--20140525214727/search.xml
                   |--20140525214728/search.xml                      
                   |.
                   |.
                   |--20140525214736/search.xml     

代码是:
我在 for 循环中使用了 int k 来遍历上面显示的所有文件夹。
并附加了从20140525214727到20140525214736到20140525214726/search.xml文件的所有文件的PropertyDetails节点。

DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();   
domFactory.setIgnoringComments(true);  
DocumentBuilder builder = domFactory.newDocumentBuilder(); 
Document doc = builder.parse(new File("C:\\20140525214726\\search.xml"));   
NodeList nodes = doc.getElementsByTagName("PropertyDetails");  
for(int k=26; k<=37; k++){  

   Document doc1 = builder.parse(new File("C:\\201405252147"+k+"\\search.xml"));   
   NodeList nodes1 = doc1.getElementsByTagName("PropertyDetails");

   for(int i=0;i<nodes1.getLength();i=i+1){  
                Node n= (Node) doc.importNode(nodes1.item(i), true);  
        nodes.item(i).getParentNode().appendChild(n);
             }

     } 

Transformer transformer = TransformerFactory.newInstance().newTransformer();  
transformer.setOutputProperty(OutputKeys.INDENT, "yes");  

StreamResult result = new StreamResult(new StringWriter());  
DOMSource source = new DOMSource(doc);  
transformer.transform(source, result);  
Writer output = new BufferedWriter(new OutputStreamWriter(
    new FileOutputStream("SeeOfXML.xml"), "UTF-8"));


String xmlOutput = result.getWriter().toString();  
output.write(xmlOutput);
output.close();

我的代码合并多个 xml 文件有什么问题吗?

【问题讨论】:

  • 运行时会发生什么?有什么例外吗?
  • @helderdarocha 没有例外,但节点()正在重复(重复节点)
  • 我想我找到了。您正在重复第一个文件的节点。

标签: java xml nodelist xmlnodelist


【解决方案1】:

您正在解析第一个文件两次。首先在这里:

Document doc = builder.parse(new File("src/main/resources/20140525214726/search.xml"));
NodeList nodes = doc.getElementsByTagName("PropertyDetails");

然后再次进入循环:

for (int k = 26; k <= 30; k++) {
    Document doc1 = builder.parse(new File("src/main/resources/" + "201405252147" + k + "/search.xml"));

由于k 是 26,您正在再次从目录20140525214726 读取文件。

将其更改为27,以便跳过该文件:

for (int k = 26; k <= 30; k++) { ... }

如果没有其他问题,它现在应该可以工作了。

【讨论】:

    猜你喜欢
    • 2013-01-12
    • 1970-01-01
    • 1970-01-01
    • 2020-09-06
    • 2012-04-24
    • 2013-10-19
    • 1970-01-01
    • 2014-12-19
    • 1970-01-01
    相关资源
    最近更新 更多