求大神给写个xml分割的例子xml配置文件太大,上传后要分割成多个xml 1 2 3 4 这样来命名 我的思路是这样 指定每个xml文件最大节点数量 我写的代码如下
- Java code
public static void main(String a[]) { SAXReader reader = new SAXReader(); File file = new File("E:\\tmp\\test\\test.xml"); String path = "E:\\tmp\\test"; int max = 1000; int fileNum = 0; if (!new File(path).isDirectory()) { new File(path).mkdirs(); } try { Document document = reader.read(file); List<Element> infos = document.selectNodes("catalog/info"); Document document1 = DocumentHelper.createDocument(); fileNum = (infos.size() / max) + 1; for (int i = 0; i < fileNum; i++) { new File(path + File.separator + (i + 1) + ".xml") .createNewFile(); List<Element> list = infos.subList(0, fileNum); for (int j = 0; j < list.size(); j++) { document1.setRootElement(document.getRootElement());//这个地方怎么写? document1.add((Element)list.get(j).clone()); } OutputFormat format = new OutputFormat(); format = OutputFormat.createPrettyPrint(); XMLWriter output = null; output = new XMLWriter(new FileOutputStream(new File( "E:\\tmp\\test" + i + ".xml")), format); output.write(document1); output.flush(); output.close(); } } catch (Exception e) { e.printStackTrace(); } }
- XML code
<?xml version="1.0" encoding="UTF-8"?> <catalog> <info name="中国建筑第八工程局有限公司"> <name>中国建筑第八工程局有限公司</name> <url>http://www.cscec8b.com.cn/</url> <hangye>房地产</hangye> <address>上海市浦东新区世纪大道1568号</address> <guim>大型(1000人以上)</guim> <photo>www.fenzhi.com/image/l152393.gif</photo> <jianjie>jianjie</jianjie> </info> <info name="中铁六局"> <name>中铁六局</name> <url>http://www.crsg.com.cn/</url> <hangye>房地产</hangye> <address>北京</address> <guim>大型(1000人以上)</guim> <photo></photo> <jianjie/> </info></catalog>
------解决方案--------------------
- Java code
/** * 保存xml * @param doc xml document对象 * @param idx 保存的文件索引号 * @throws Exception */ public static void saveXML(Document doc, int idx) throws Exception{ OutputFormat format = new OutputFormat(); format = OutputFormat.createPrettyPrint(); XMLWriter output = null; output = new XMLWriter(new FileOutputStream(new File( "c:\\" + idx + ".xml")), format); output.write(doc); output.flush(); output.close(); } public static void main(String[] args) throws Exception{ SAXReader reader = new SAXReader(); Document doc = reader.read(new File("c:/tmp.xml")); List<Element> infos = doc.selectNodes("catalog/info"); int nodeNum = infos.size(); //总共的info元素个数 int max = 1000; //每份info元素个数 int fileNum = nodeNum/max; //分割的文件个数 if(nodeNum%max!=0){ fileNum++; } int nodeIdx=0; //遍历中的节点索引 int fileIdx=0; //分割的文件索引 Document sliptDoc = null; Element rootEle = null; for(int i=0;i<nodeNum;i++){ if(nodeIdx==max || nodeIdx==0){ if(nodeIdx==max){ saveXML(sliptDoc, fileIdx); nodeIdx = 0; fileIdx ++; } sliptDoc = DocumentHelper.createDocument(); rootEle = sliptDoc.addElement("catalog"); } Element item = (Element)infos.get(i); rootEle.add((Element)item.clone()); nodeIdx ++; } saveXML(sliptDoc, fileIdx); //保存最后一个文件 }