求大神给写个xml分割的例子xml配置文件太大,上传后要分割成多个xml 1 2 3 4 这样来命名 我的思路是这样 指定每个xml文件最大节点数量 我写的代码如下
public static void main(String a[]) {有点乱了 这个明显是个不完整的 求大神完善 我想要的结果就是将test.xml 分成多分 比如test.xml有1001条数据那就是分成2份 xml格式如下
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 version="1.0" encoding="UTF-8"?>节点有13W之多
<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>
------解决思路----------------------
/**
* 保存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份完整的独立文档还是有价值的,拆完之后破坏了文档的机构就不太好了,希望楼主早日解决