如何将新列表项追加到列表中

时间:2011-10-17 21:08:54

标签: docx docx4j

我想找到一个列表段落(以。开头),并将另一个列表项追加到此列表中(它取决于第一个列表元素的文本)。 我已经尝试了许多创建新段落的方法,但我所取得的所有成就都是创建了新的列表元素,但org.docx4j.wml.Text个对象被附加到附加新段落的段落中。新段落文本为空。如何创建新的列表元素并将其附加到正确的元素?

  • 一个。 list element 1 | test | // |考试|应附加到b。
  • 湾//创建了新项目,但没有文本
  • 下进行。
  //traverse through a document
    public List<Object> apply(Object obj) {
       if (obj instanceof org.docx4j.wml.P) { 
          if (p.getPPr() != null) {
             if (p.getPPr().getPStyle() != null) {
                if ((p.getPPr().getPStyle().getVal().equals("Akapitzlist"))) {
                   //there is a list paragraph
                         ObjectFactory factory = Context.getWmlObjectFactory();
                         Object deepCopy = XmlUtils.deepCopy(obj);
                    //Create the paragraph 
                    org.docx4j.wml.P para = factory.createP();

                    // Create the text element 
                    org.docx4j.wml.Text t = factory.createText();
                    t.setValue("|test|");

                    // Create the run 
                    org.docx4j.wml.R run = factory.createR();
                    run.getContent().add(t);
                    para.getContent().add(run);
                    //add new paragraph to the document
                    ((org.docx4j.wml.P) obj).getContent().add(para);

    }...}

1 个答案:

答案 0 :(得分:0)

我的解决方案,只是增加索引附加到身体。我正在为preserwe风格创建深层副本。

    public List<Object> apply(Object obj) {


    Object deepCopy = null;



    if (obj instanceof org.docx4j.wml.P) {

        org.docx4j.wml.P p = (org.docx4j.wml.P) obj;


        if (p.getPPr() != null) {
            if (p.getPPr().getPStyle() != null) {
                if ((p.getPPr().getPStyle().getVal().equals("Akapitzlist")) && (akapListCounter < 10)) {

                    if (((org.docx4j.wml.P) obj).getPPr().getPStyle() != null) {
                        if ((((org.docx4j.wml.P) obj).getPPr().getPStyle().getVal().equals("Akapitzlist"))) {
                            deepCopy = XmlUtils.deepCopy(obj);
                            akapListCounter++;
                            int indexOf = wmlDocumentEl.getBody().getContent().indexOf(obj);


                            List<Object> content = ((org.docx4j.wml.P) deepCopy).getContent();
                            for (Object el : content) {
                                System.out.println("class1:" + el.getClass().toString());
                                if (el instanceof org.docx4j.wml.R) {
                                    List<Object> subc = ((org.docx4j.wml.R) el).getContent();
                                    for (Object r : subc) {
                                        ((javax.xml.bind.JAXBElement) r).setValue("tetetete");
                                    }
                                }

                            }// end for


                            wmlDocumentEl.getBody().getContent().add(indexOf + 1, deepCopy);


                        }
                    }//end get style

                }
            } 
        } else {}


    }

    return null;
}