1

我有一个以 WordProcessingML 格式保存为 XML 的 Word 2003 文档。它包含很少的占位符,这些占位符将被适当的内容动态替换。但是,问题在于 Word 似乎将它们随机拆分为单独的单词。例如,而不是这个:

<w:t>${dl.d.out.ecs_rev}</w:t>

我有这个:

...
<w:t>${</w:t>
 </w:r>
 <w:r wsp:rsidR="005D11C0">
  <w:rPr>
   <w:sz w:val="20" />
   <w:sz-cs w:val="20" />
  </w:rPr>
  <w:t>dl.</w:t>
 </w:r>
<w:r wsp:rsidRPr="00696324">
 <w:rPr>
  <w:sz w:val="20" />
  <w:sz-cs w:val="20" />
 </w:rPr>
<w:t>d.out.ecs_rev}</w:t>
...

有没有办法使用 Word 2003 保存“干净”的 XML 文档,或者是否有任何现有的解决方案可以进行清理?

我试图用 Java 编写一个方法来连接占位符的分离部分,但由于不同切割组合的数量相对较大,因此该算法比我必须做的原始任务复杂得多,所以它是问题本身。

4

3 回答 3

3

如果您可以控制原始 Word 文档,则可以阻止 Word 插入 rsid 并突出显示语法/拼写错误。

         Word.Options opts = Word.Options;
            opts.CheckGrammarAsYouType = false;
            opts.CheckGrammarWithSpelling = false;
            opts.CheckSpellingAsYouType = false;
            opts.StoreRSIDOnSave = false;

单词仍然会被拆分,例如,如果您在单词中部分更改字体。

嗯,我有一个简单+丑陋的xslt,我用它来清理WordML,就像你发布的例子一样。如果您愿意,我可以将其提交给 docx4j,但正如您所说,有多种组合不会被涵盖。无论如何,如果你想要它,请发帖到 docx4j 论坛。

一种更健壮的方法是提取纯文本,并将纯文本与 XML 相关联,这样您就可以搜索纯文本,然后从那里转到 XML。

于 2009-11-17T11:41:42.087 回答
2

您可以使用 Aspose.Words 并调用它:

Document.JoinRunsWithSameFormatting。

http://www.aspose.com/documentation/.net-components/aspose.words-for-.net-and-java/aspose.words.document.joinrunswithsameformatting.html

于 2010-01-21T02:59:22.627 回答
1

Word 2003 XML 异常复杂且难以解码。您获得多个标签的原因是 Word ML 生成称为运行的标签(w:r 标签)。据我所知,没有简单的方法来清理上面的 XML。我建议使用 HTML 而不是 WordML。使用适当的内容来操作和替换占位符要容易得多。如果成本不是目标,请使用 Aspose 之类的产品。它为您做所有事情,并且易于使用。

于 2009-11-13T15:43:39.137 回答