当前位置: 首页 > 知识库问答 >
问题:

docx4j复选复选框

堵昊焱
2023-03-14
<w:fldChar w:fldCharType="begin">
<w:ffData><w:name w:val="Kontrollkästchen1"/>
<w:enabled/>
<w:calcOnExit w:val="0"/>
<w:checkBox>
<w:sizeAuto/>
<w:default w:val="0"/>
</w:checkBox>

这会找到我想要的节点吗?如果没有,我如何获得节点并正确地更改属性?

谢谢。马格努斯

共有1个答案

乜昆
2023-03-14

如果使用的是XPaths,则需要考虑名称空间。

使用XPathQuery示例,可以为其提供以下内容:

String xpath = "//w:fldChar[./w:ffData/w:checkBox]";

(或变体,取决于您想选择这三个节点中的哪一个)

这里有一个如何这样做的例子。

package org.docx4j.samples;

import java.util.ArrayList;
import java.util.List;

import org.docx4j.TraversalUtil;
import org.docx4j.XmlUtils;
import org.docx4j.TraversalUtil.CallbackImpl;
import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
import org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart;
import org.docx4j.wml.FldChar;

public class TraverseFind {


    /**
     * Example of how to find an object in document.xml
     * via traversal (as opposed to XPath)
     *  
     */
    public static void main(String[] args) throws Exception {

        String inputfilepath = System.getProperty("user.dir") + "/checkbox.docx";

        WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.load(new java.io.File(inputfilepath));      
        MainDocumentPart documentPart = wordMLPackage.getMainDocumentPart();

        Finder finder = new Finder(FldChar.class);
        new TraversalUtil(documentPart.getContent(), finder);

        System.out.println("got " + finder.results.size() + " of type " +  finder.typeToFind.getName() );

        for (Object o : finder.results) {

            Object o2 = XmlUtils.unwrap(o);
            // this is ok, provided the results of the Callback
            // won't be marshalled          

            if (o2 instanceof org.docx4j.wml.Text) {

                org.docx4j.wml.Text txt = (org.docx4j.wml.Text)o2;

                System.out.println( txt.getValue() );

            } else {
                System.out.println( XmlUtils.marshaltoString(o, true, true));
            }



        }

    }

      public static class Finder extends CallbackImpl {

          protected Class<?> typeToFind;

          protected Finder(Class<?> typeToFind) {
              this.typeToFind = typeToFind;
          }

            public List<Object> results = new ArrayList<Object>(); 

            @Override
            public List<Object> apply(Object o) {

                // Adapt as required
                if (o.getClass().equals(typeToFind)) {
                    results.add(o);
                }
                return null;
            }
      }

}

与我完成这些示例的方式一样,它们都得到了org.docx4j.wml.fldchar对象。

从那里,您将在getFfData()中找到CTFFCheckBox。getNameorenabledorCalConexit()

 类似资料:
  • 我试图读取一堆格式相同的word docx文件,并将数据提取到数据库中。我对文本没有任何问题,但我在与复选框作斗争。我需要说的是,我是docx4j的新手,但已经在这个问题上挣扎了四天了。我真的很重视一些帮助/帮助/建议。 结果是: 现在,我已经为包含一个难以捉摸的复选框的单元格添加了mainDocumentPart.getXML()的输出。我在那里看不到任何东西告诉我价值。谁能告诉我我错过了什么吗

  • 我正试图在模板上填充复选框。 https://www.docusign.com/p/apiguide/content/senging%20group/tab.htm上的文档告诉我要设置Value=“x”来选中复选框。那不起作用。

  • 我试图创建一个表单,该表单顶部有一个复选框,当用户选中该复选框时,它会选择其他特定的复选框,但不是所有复选框。我很难通过反复试验或搜索找到答案。我唯一能找到的就是“全选”选项。不是我想要的。 理想情况下,当用户选中“管理包”旁边的复选框时,我想要“Chrome外观组”和“远程启动” 下面是代码和我在这方面的基本尝试,但它不起作用。提前谢谢。 超文本标记语言: Javascript 我不知道这个Ja

  • 下载整个项目。zip在这里 此问题的代码在Views文件夹中的CreateSchedule.aspx文件中。 以下是GridView的ASP.NET: 在取消选中某个框后调试事件时,网页上的复选框显示为未选中,但的值为true,即使该复选框在网页上显示为未选中。(chkRow是未选中的复选框) 更新3 我取得了一些突破。我发现复选框的问题在于嵌套的gridview位于使用JavaScript折叠和

  • 我创建了一个windows窗体(到目前为止)只包含复选框。构造函数接受一个参数:。对于这个数组中的每个字符串,我都会创建一个复选框。 例如: null 那么,当另一个复选框调用uncheck时,是否有一种方法可以告诉我的复选框不要运行? 下面是我的代码(它都是手工编写的,所以没有使用visual studio设计器):

  • 主要内容:实例ionic 复选框(checkbox)与普通的 HTML 复选框没什么区别,以下实例演示了 ionic 复选框 ion-checkbox 的应用。 实例 实例中,会根据复选框是否选中,修改 checked 值,true 为选中, false 为未选中。 HTML 代码 JavaScript 代码 css 代码: 尝试一下 » 效果如下所示: