如何从不同的XML文件克隆两个节点并将其子节点合并到另一个XML文件中

时间:2018-11-29 14:50:19

标签: java xml appendchild domparser clonenode

我试图从两个不同的XML文件中获取两个节点,并在另一个XML文件中创建一个新节点,其中包含两个节点中的所有子节点。这些节点的子节点数目完全相同,但是值不同。

我正在使用DOM解析器读取文件。(我没有包含解析文件的代码)

要使用来自不同XML文件的节点,我必须首先克隆它们。这就是我的方法(newXML是我需要新节点的文件)。

Element newRoot = newXML.getDocumentElement();

Node firstClone = firstNode.cloneNode(true);
newXML.adoptNode(firstClone);

Node secondClone = secondNode.cloneNode(true);
newXML.adoptNode(secondClone);

NodeList firstCloneChilds = firstClone.getChildNodes();
NodeList secondCloneChilds = secondClone.getChildNodes();

for (int i = 0; i < backupChilds.getLength(); i++)
{  
   System.out.println(firstCloneChilds.item(i).getNodeName() + " " + i);    
   secondClone.appendChild(firstCloneChilds.item(i));//That is the line where the problem occurs.                            
}
newNode = secondClone.cloneNode(true);
newXML.adoptNode(newNode);

newRoot.appendChild(newNode);

DOMSource source = new DOMSource(newXML);
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();     
StreamResult result = new StreamResult(newPath);
transformer.transform(source, result);

我将System.out.println()包含在for循环中只是为了查看发生了什么,这非常有趣。 这就是我在循环中用appendChild注释了这一行后得到的结果。

#text
ID_Country
#text
ID_Currency
#text
IsoCodeNumber
#text
IsoCodeLetter
#text
PostCode
#text
CountryName
#text

如果这行没有被注释,这就是我得到的。

#text
#text
#text
#text
#text
#text
#text    
<ERROR 29.11.18 15:39:35> Error
java.lang.NullPointerException
    at org.apache.xerces.dom.ParentNode.internalInsertBefore(Unknown Source)
    at org.apache.xerces.dom.ParentNode.insertBefore(Unknown Source)
    at org.apache.xerces.dom.NodeImpl.appendChild(Unknown Source)
    at de.ansys.base.module.imex.xmlcompare.DomParser.main(DomParser.java:256)

我得到了NullPointerException,因为由于现在只有文本节点,因此firstClone中的子节点数量减少了。有人知道会发生什么吗?

0 个答案:

没有答案