Как клонировать два узла из разных файлов XML и объединить их подузлы в другом файле XML - PullRequest
0 голосов
/ 29 ноября 2018

Я пытаюсь получить два узла из двух разных файлов 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 уменьшено из-за того, что теперь есть только текстовые узлы.Кто-нибудь знает, что происходит?

...