【发布时间】:2016-10-24 08:50:40
【问题描述】:
我需要将目录中的多个 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();
【问题讨论】:
-
@Fildor - 尝试使用 Stax 并编辑了上面的代码。您能否就删除该元素所需的实施提出建议?
标签: java xml merge xml-parsing