ディレクトリ内のmutilpe xmlファイルを単一のxmlファイルにマージする必要があります。以下は、私が達成しようとしているかの説明です:mutiple xmlファイルをマージし、各xmlファイルの共通ルート要素をマージしたファイルのルートに設定します
のxml-1:
<?xml version="1.0" encoding="UTF-8"?>
<products>
<product>
<id>0569054</id>
<ProviderName>John</ProviderName>
</product>
</products>
のxml-2
<?xml version="1.0" encoding="UTF-8"?>
<products>
<product>
<id>1002363</id>
<ProviderName>Paul</ProviderName>
</product>
</products>
は、出力をマージ:
<?xml version="1.0" encoding="UTF-8"?>
<products>
<product>
<id>0569054</id>
<ProviderName>John</ProviderName>
</product>
<product>
<id>1002363</id>
<ProviderName>Paul</ProviderName>
</product>
</products>
これは、 Javaコード、私はしようとしています: 編集:はStAXで試しました。ここで製品を削除するためにここに追加する必要があるのは何ですか?これを実装するためにStaxを今日通った、訂正のアドバイスも大歓迎です。
File dir = new File("/opt/dev/common");
File[] rootFiles = dir.listFiles();
Writer outputWriter = new FileWriter("mergedFile1.xml");
XMLOutputFactory xmlOutFactory = XMLOutputFactory.newFactory();
XMLEventWriter xmlEventWriter = xmlOutFactory.createXMLEventWriter(outputWriter);
XMLEventFactory xmlEventFactory = XMLEventFactory.newFactory();
xmlEventWriter.add(xmlEventFactory.createStartDocument());
xmlEventWriter.add(xmlEventFactory.createStartElement("", null, "products"));
XMLInputFactory xmlInFactory = XMLInputFactory.newFactory();
for (File rootFile : rootFiles) {
XMLEventReader xmlEventReader = xmlInFactory.createXMLEventReader(new StreamSource(rootFile));
XMLEvent event = xmlEventReader.nextEvent();
while (event.getEventType() != XMLEvent.START_ELEMENT) {
event = xmlEventReader.nextEvent();
}
do {
xmlEventWriter.add(event);
event = xmlEventReader.nextEvent();
} while (event.getEventType() != XMLEvent.END_DOCUMENT);
xmlEventReader.close();
}
xmlEventWriter.add(xmlEventFactory.createEndElement("", null, "products"));
xmlEventWriter.add(xmlEventFactory.createEndDocument());
xmlEventWriter.close();
outputWriter.close();
私はSTAXで試してみる必要があるだろう:https://docs.oracle.com/javase/tutorial/jaxp/stax/using.html – Fildor
@Fildorを - スタックスにしようと、上記のコードを編集しました。あなたは要素を削除するために必要な実装に関するアドバイスをお願いしますか? – ani0710