Объединить несколько файлов XML с помощью Java нодлиста
Для объединения нескольких XML-файлов с использованием нодлиста я использовал приведенный ниже код, но его выходной файл имеет повторяющиеся (повторяющиеся) значения.
Структура папок XML-файлов, как показано ниже
c:|--20140525214726/search.xml
|--20140525214727/search.xml
|--20140525214728/search.xml
|.
|.
|--20140525214736/search.xml
Код является:
Я использовал int k для цикла loop, чтобы перебрать все папки, показанные выше.
И добавили узлы PropertyDetails всех файлов от 20140525214727 до 20140525214736 до 20140525214726/search.xml.
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?
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++) { ... }
Это должно работать сейчас, если нет никаких других проблем.