[英]Merging XML using SAX parser
我在下面的链接中查看了讨论- 使用Java NodeList合并xml文件
我只需要使用SAX解析器的相同功能,因为我只需要合并两个文件,但是它们的大小很大。
请帮忙。
文件1
<root>
<Item>
<a>jhiuo55jhj</a>
<b>jhjoiohj</b>
<c>jhjh334j</c>
</Item>
</root>
文件2
<root>
<Item>
<x>jhi99jhj</x>
<y>jhyty66jhj</y>
<z>jhxdx3jhj</z>
</Item>
</root>
预期产量
<root>
<Item>
<a>jhiuo55jhj</a>
<b>jhjoiohj</b>
<c>jhjh334j</c>
<x>jhi99jhj</x>
<y>jhyty66jhj</y>
<z>jhxdx3jhj</z>
</Item>
</root>
基本解决方案,不包括命名空间或属性
码
public class XmlMerger {
public static void main(String[] args) throws Exception {
FileOutputStream outputStream = new FileOutputStream("output.xml");
XMLStreamWriter out = XMLOutputFactory.newInstance().createXMLStreamWriter(new OutputStreamWriter(outputStream));
SAXParser saxParser = SAXParserFactory.newInstance().newSAXParser();
Handler handler = new Handler(out);
out.writeStartDocument();
out.writeStartElement("root");
saxParser.parse(new File("input1.xml"), handler);
saxParser.parse(new File("input2.xml"), handler);
out.writeEndElement();
out.close();
}
private static class Handler extends DefaultHandler {
private XMLStreamWriter out;
private boolean dumping;
public Handler(XMLStreamWriter out) {
this.out = out;
}
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
if ("root".equals(qName)) {
dumping = true;
} else {
try {
out.writeStartElement(qName);
// TODO attributes if you need them...
} catch (XMLStreamException e) {
e.printStackTrace();
}
}
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
if ("root".equals(qName)) {
dumping = false;
} else {
try {
out.writeEndElement();
} catch (XMLStreamException e) {
e.printStackTrace();
}
}
}
@Override
public void characters(char ch[], int start, int length) throws SAXException {
if (!dumping) {
return;
}
try {
out.writeCharacters(ch, start, length);
} catch (XMLStreamException e) {
e.printStackTrace();
}
}
}
}
我想说您在这里采用SAX-DOM方法以获得更好的性能。
可以说下面是输入的xml文件
1) First.xml
<root>
<Item>
<a>1</a>
<b>2</b>
<c>3</c>
</Item>
<Item>
<a>1</a>
<b>2</b>
<c>3</c>
</Item>
</root>
2) Second.xml
<root>
<Item>
<x>11</x>
<y>22</y>
<z>33</z>
</Item>
<Item>
<x>44</x>
<y>55</y>
<z>66</z>
</Item>
</root>
合并这些xml的步骤:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.