日期:2014-05-19  浏览次数:20733 次

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;