当前位置: 代码迷 >> J2EE >> xml分割,该如何解决
  详细解决方案

xml分割,该如何解决

热度:51   发布时间:2016-04-22 00:45:09.0
xml分割
求大神给写个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();         }     }
有点乱了 这个明显是个不完整的 求大神完善 我想要的结果就是将test.xml 分成多分 比如test.xml有1001条数据那就是分成2份 xml格式如下
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> 
节点有13W之多



------解决方案--------------------
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); //保存最后一个文件          }
  相关解决方案