日期:2014-05-20  浏览次数:20689 次

一个算法问题,最好用java回答。
我把文件处理到一个ArrayList里面了。内容如:add(“章”),add(“节”),add(“段”)而成的一个list:章 节 段 段 段 章 节 段 段 段 章 段 段 , 其中一个章有多个节,每个节有多个段。并且节可以没有。和一本书的内容一样。我想以章分成多个xml,就是chapter001.xml存一章,chapter002.xml存一章,但是不知怎样分(注意节可以没有)。怎样拆分同时生成多个xml(注意拆分同时写成多个xml,dom4j用的头都大了,发现一循环添加很出错)?
------解决方案--------------------
是拆分list不行还是生成xml不行
你先把list拆成
<章>
  <节>
    <段>
    </段>
     ....
  </节>
  .....
</章>
然后再生成xml不就清晰多了
------解决方案--------------------
循环ArrayList如果当前值是章,你就重新new一个Document.
------解决方案--------------------
引用:
是拆分list不行还是生成xml不行
你先把list拆成
<章>
  <节>
    <段>
    </段>
     ....
  </节>
  .....
</章>
然后再生成xml不就清晰多了




我想问的就是怎样拆分?


------解决方案--------------------
引用:
循环ArrayList如果当前值是章,你就重新new一个Document.


不行啊,你试试,我想生成多个xml,一循环Document就出错了。
------解决方案--------------------

public static void main(String[] aa) {
List<String> list = new ArrayList<String>();
list.add("第一章");
list.add("第一节");
list.add("第一段");
list.add("第二段");
list.add("第三段");
list.add("第二节");
list.add("第一段");
list.add("第二段");
list.add("第三段");
list.add("第二章");
list.add("第一节");
list.add("第一段");
list.add("第二段");
list.add("第三段");
list.add("第二节");
list.add("第一段");
list.add("第二段");
list.add("第三段");
list.add("第三章");
list.add("第一段");
list.add("第二段");
list.add("第三段");

Document document = null;
Element zhang = null;
Element jie = null;
Element duan = null;
List<Document> listDocument = new ArrayList<Document>();
for (String ss : list) {
if (ss.indexOf("章") >= 0) {
if (document != null) {
listDocument.add(document);
document = null;
zhang = null;
jie = null;
duan = null;
}
document = DocumentHelper.createDocument();
zhang = DocumentHelper.createElement(ss);
document.add(zhang);
} else if (ss.indexOf("节") >= 0) {
jie = DocumentHelper.createElement(ss);
zhang.add(jie);
} else if (ss.indexOf("段") >= 0) {
duan = DocumentHelper.createElement(ss);
if (jie == null) {
zhang.add(duan);
} else {
jie.add(duan);
}
}
}
listDocument.add(document);
if (listDocument != null && listDocument.size() > 0) {
for (Document dd : listDocument) {
System.out.println(dd.asXML());
}
}
}



我试了可以啊  你运行下 看是不是要这个效果