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;

たとえば、単語の途中でフォントを変更した場合でも、単語は分割されます。

うーん、私はあなたが投稿した例のようにWordMLをクリーンアップするために使用した単純で醜いxsltを持っています。必要に応じて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 をきれいにする簡単な方法はありません。WordML の代わりに HTML を使用することをお勧めします。プレースホルダーを適切なコンテンツで操作および置換する方がはるかに簡単です。コストが目的でない場合は、Aspose などの製品を使用してください。それはあなたのためにすべてを行い、使い方は簡単です。

于 2009-11-13T15:43:39.137 に答える