MS Word以XML格式分割单词

时间:2009-11-13 15:33:30

标签: xml ms-word word-2003

我将Word 2003文档保存为WordProcessingML格式的XML。它包含几个占位符,它们将被适当的内容动态替换。 但是,问题在于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中编写一个方法来连接占位符的分离部分,但由于不同切割组合的数量相对较大,因此算法要比我必须做的原始任务复杂得多,所以它本身就是问题。

3 个答案:

答案 0 :(得分: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。

答案 1 :(得分:2)

答案 2 :(得分:1)

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