当前位置: 代码迷 >> J2EE >> xml瓜分
  详细解决方案

xml瓜分

热度:98   发布时间:2016-04-17 23:26:05.0
xml分割
求大神给写个xml分割的例子xml配置文件太大,上传后要分割成多个xml  1  2  3  4  这样来命名  我的思路是这样  指定每个xml文件最大节点数量  我写的代码如下
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 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之多


------解决思路----------------------

/**
 * 保存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); //保存最后一个文件
          }


已测试...
------解决思路----------------------
你这个按节点分割。。。感觉没啥意义啊。。。反正只要是分割就已经破坏原有结构了。

你不如直接就按照大小分割好了,这样无论是分割还是合并,性能都会很高;程序逻辑也简单不容易出错。
------解决思路----------------------
四楼正解,拆成N份完整的独立文档还是有价值的,拆完之后破坏了文档的机构就不太好了,希望楼主早日解决
  相关解决方案