0

我有一个场景,我需要在一本书中获取子页面(最多 3 个)并将这些页面移动到书的父级。

像:

<book>
 <book1>
   <page1>
   <page2>
   <page3>
   <page4>
 </book1> 
</book>

因此,如果 book1 下的页数大于 3,则将 book1 拆分为 2,即 book1_h_1 和 book2_h_2,并将 page1、page2、page 移动到 book1_h_1 下,并将 page4 移动到 book1_h_2 下。book1下可能有超过4页的场景,比如10页或更多。

为了获得需要创建多少新书,我做了以下操作

List<Element> elChildren = book1.getChildren();
int size = 3;
int numBatches = (elChildren.size() / size) + 1;
List<Element> batches = null;
for (int index = 0; index < numBatches; index++) {
int count = index + 1;
int fromIndex = Math.max(((count - 1) * size), 0);
int toIndex = Math.min((count * size), elChildren.size());
batches = elChildren.subList(fromIndex, toIndex);
}

public static void createElementNew(Element parent, int i){
for(int q = 1; q <=i; q++){
parent.addContent(new Element("book1_h_"+q));
}
}

我的问题是如何将列表“批次”添加到新创建的书籍“book1_h_1 和 book1_h_2?

有人可以帮我吗?

4

1 回答 1

0

你可以用一个迭代器完成整个事情.....不需要将东西保存在变量和存储桶列表中。

'booke' 将指向 book1 元素...

Element booke = ..... ;
Element parent = booke.getParentElement();
int bookpos = parent.indexOf(booke);
Iterator<Element> lit = booke.getChildren().iterator();

int cnt = 0;
int bkh = 1;
Element bke = null;
String namebase = booke.getName() + "_h_";
while (it.hasNext()) {
    Element page = it.next();
    if (cnt >= 3) {
       if ((cnt % 3) == 0) {
          bkh++;
          bookpos++;
          bke = new Element(namebase + bkh);
          parent.addContent(bookpos, bke);
       }
       it.remove();
       bke.add(page);
    }
    cnt++;
}
if (cnt > 3) {
    booke.setName(namebase + "1");
}

罗弗尔

于 2013-03-14T23:46:19.833 回答