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。
我已经能够通过代码为文档中找到的占位符设置 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。