MS WordはXML形式で単語を分割します
質問
WordProcessingML形式でXMLとして保存されたWord 2003ドキュメントがあります。適切なコンテンツに動的に置き換えるプレースホルダーが少なく含まれています。しかし、問題は、単語がそれらを別々の単語でランダムに分割するように見えるということです。たとえば、これの代わりに:
<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のメソッドをプログラムしようとしましたが、異なる切断の組み合わせの数が比較的大きいため、そのためのアルゴリズムは私がしなければならない元のタスクよりもはるかに複雑です。それ自体の問題。
解決
Aspose.Wordsを使用して、これを呼び出すことができます。
document.joinrunswithsameformatting。
他のヒント
元の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に移動できます。
Word 2003 XMLは異常に複雑で、デコードが難しいです。複数のタグを取得している理由は、Word MLが実行(W:Rタグ)と呼ばれるタグを生成するためです。私の知る限り、上記のXMLをきれいにする簡単な方法はありません。 WordMLの代わりにHTMLを使用することをお勧めします。プレースホルダーを適切なコンテンツに操作して交換する方がはるかに簡単です。コストが目的でない場合は、Asposeのような製品を使用してください。それはあなたのためにすべてを行い、使いやすいです。