考虑 XML 文件 Report.xml :
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Report FileName="abc.bin" reportDate="05/12/2016 02:44:22 AM">
<Statistics>
<child value="abc">
<subchild>...</subchild>
</child>
<child value="xyz">
<subchild>...</subchild>
</child>
</Statistics>
<Properties>
<child1>...</child1>
<child2>...</child2>
.
.
.
<childn>...</childn>
</Properties>
<OverallStatistics>
<child1>...</child1>
<child2>...</child2>
.
.
.
<childn>...</child1>
</OverallStatistics>
</Report>
我只想将上面的 XML 文件拆分为:
ReportSplit1.xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Report FileName="abc.bin" reportDate="05/12/2016 02:44:22 AM">
<Statistics>
<child value="abc">
<subchild>...</subchild>
</child>
</Statistics>
<Properties>
<child1>...</child1>
<child2>...</child2>
.
.
.
<childn>...</childn>
</Properties>
<OverallStatistics>
<child1>...</child1>
<child2>...</child2>
.
.
.
<childn>...</child1>
</OverallStatistics>
</Report>
ReportSplit2.xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Report FileName="abc.bin" reportDate="05/12/2016 02:44:22 AM">
<Statistics>
<child value="xyz">
<subchild>...</subchild>
</child>
</Statistics>
<Properties>
<child1>...</child1>
<child2>...</child2>
.
.
.
<childn>...</childn>
</Properties>
<OverallStatistics>
<child1>...</child1>
<child2>...</child2>
.
.
.
<childn>...</child1>
</OverallStatistics>
</Report>
即保留父节点的属性,保留兄弟节点。仅应在统计节点中的子节点上进行拆分。
按照链接中给出的解决方法将代码段更改为
package xmlsplitting;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.*;
import org.w3c.dom.*;
import org.xml.sax.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import javax.xml.xpath.*;
public class XmlSplit
{
static public void main(String[] arg) throws Exception
{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse("D:\\Analyzer\\FileSplit\\Report.xml");
TransformerFactory tranFactory = TransformerFactory.newInstance();
Transformer aTransformer = tranFactory.newTransformer();
XPath xpath = XPathFactory.newInstance().newXPath();
NodeList list = (NodeList)xpath.evaluate("//Report/Statistics/child", doc, XPathConstants.NODESET);
for (int i=1; i<list.getLength(); i++)
{
Node element = list.item(i).cloneNode(true);
if(element.hasChildNodes())
{
Source src = new DOMSource(element);
FileOutputStream fs = new FileOutputStream( "D:\\Analyzer\\FileSplit\\ReportSplit"+ i + ".xml");
Result dest = new StreamResult(fs);
aTransformer.transform(src, dest);
fs.close();
}
}
}
}
实现的 XML 文件拆分为:
ReportSplit1.xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<child value="abc">
<subchild>...</subchild>
</child>
ReportSplit2.xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<child value="xyz">
<subchild>...</subchild>
</child>
谁能提供一种解决方法来实现所需的 XML 文件拆分?