我试图从两个不同的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中的子节点数量减少了。有人知道会发生什么吗?