Xpath 部分为 NULL,通过内容控制工具包设置了 xpath

Xpath Part NULL, with xpaths set via content control toolkit

我已经能够通过代码为文档中找到的占位符设置 xpath。


for (Object o : finderSdtRun.results) {

            if (o instanceof SdtRun){

                SdtPr sdtPr=((SdtRun) o).getSdtPr();
                Tag t = sdtPr.getTag();                 
                CTDataBinding ctDataBinding = Context.getWmlObjectFactory().createCTDataBinding();
                //JAXBElement jaxbDB = Context.getWmlObjectFactory().createSdtPrDataBinding(ctDataBinding);
                sdtPr.setDataBinding(ctDataBinding);
                ctDataBinding.setXpath("tuttappostaferragost");
                ctDataBinding.setStoreItemID("something");          

                ObjectFactory factory = new org.opendope.xpaths.ObjectFactory();




                DataBinding db = factory.createXpathsXpathDataBinding();
                db.setXpath("tuttappostaferragost");
                db.setStoreItemID("something");

                Xpaths.Xpath xp = factory.createXpathsXpath();
                xp.setDataBinding(db);
                xp.setId("something");



          try {
                    wordMLPackage.getMainDocumentPart().getXPathsPart().getContents().getXpath().add(xp);
                } catch (Docx4JException e) {
                    e.printStackTrace();
                }       

                ;

问题是,一旦设置,它们就无法被word识别,所以我想将创建的Xpaths添加到一个new XpathPart,然后将其添加到main文档部分。 但我失败了,因为方法:

 wordMLPackage.getMainDocumentPart().getXPathsPart() 

returns。这听起来很合理,因为只设置了内容控制,没有任何 Xpath。

然后我通过内容控制工具包设置 Xpaths 和上面相同的代码行,返回 null,这给我的想法增加了很多混乱。

有没有办法告诉文档新的 Xpath 已添加到文档中? 我的意思是,如果有一种方法可以通过代码(w:databinding w:storedItemId 标签)添加 Xpath,为什么它无法工作?

一般来说,我想通过代码添加 Xpath 和所有必要的信息,避免使用任何工具包。 谢谢 :D

首先,您必须决定是想要普通的旧 Word 数据绑定,还是额外的 OpenDoPE 功能(使用内容控制标签来支持重复、条件等)。

如果您使用的是 OpenDoPE 扩展,则只需要一个 XPaths 部分。

我现在假设您只是想进行基本的 Word 内容控制数据绑定。

要以编程方式设置它,您需要添加自定义 xml 部分,以及从它到 itemProps.xml 部分的 rel,其中包含如下内容:

<ds:datastoreItem ds:itemID="{5448916C-134B-45E6-B8FE-88CC1FFC17C3}" xmlns:ds="http://schemas.openxmlformats.org/officeDocument/2006/customXml">
  <ds:schemaRefs/>
</ds:datastoreItem>

(要将 B 部分添加到 A 部分,请使用 partA.addTargetPart)

你可以看到这是给自定义 xml 部分它的 itemID 的部分;这与您设置的值相对应:

        DataBinding db = factory.createXpathsXpathDataBinding();
        db.setStoreItemID("something");

然后,通过您使用的方法设置 XPath。