0

私は2つの文書を持っています:

  1. 資料1(入力)
  2. ドキュメント 2 (出力)

ドキュメント 2 は、ドキュメント 1 を変換プロセスに通した結果であり、コンテンツとフォーマットはそのまま残されます (Word で並べて比較することによって検証されます)。

ただし、このプロセスでは、.docx ファイルから多くの ID 番号が削除されます。

例えば、

      <w:pw:rsidP="00B600D6" w:rsidR="00F55D78" w:rsidRDefault="00B600D6">

になる

      <w:p>

次のコードを介した各ドキュメントのダンプによると:

本文 body = ((Document)newerPackage.getMainDocumentPart().getJaxbElement()).getBody();
ノード node = org.docx4j.XmlUtils.marshaltoW3CDomDocument(body).getDocumentElement();
TransformerFactory tf = TransformerFactory.newInstance();
トランスフォーマー トランスフォーマー = tf.newTransformer();
トランスフォーマー.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "いいえ");
トランスフォーマー.setOutputProperty(OutputKeys.METHOD, "xml");
トランスフォーマー.setOutputProperty(OutputKeys.INDENT, "はい");
トランスフォーマー.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
トランスフォーマー.setOutputProperty("{http://xml.apache.org/xslt}インデント量", "4");
トランスフォーマー.トランスフォーム(新しい DOMSource(ノード),
             新しい StreamResult(新しい OutputStreamWriter(System.out, "UTF-8")));

ここで推奨されている docx4j Differencer 比較方法を使用すると、すべて (フォーマットが適用されていない最初の行を除く) が変更として表示されます。

質問: 差分は、欠落している ID、フォーマット、またはその他の結果ですか?

重要な場合は、このコンテキストで docx4j を使用して、ラウンドトリップ プロセスで自動化された健全性/回帰テストを実行します (つまり、「ロスレス」プロセスを適用し、違いがないことを期待します)。

4

1 に答える 1

0

開示:私はdocx4jに取り組んでいます

段落間の唯一の違いがrsid属性である場合でも、それらは異なるものとして検出されます。

比較を実行する前にドキュメントを「クリーンアップ」して、どちらのdocxにもrsid属性がないようにすることができます。フィルタのサンプルを参照してください。

ちなみに、オブジェクト(たとえば、単一の段落、または本文全体)のXMLを確認する簡単な方法は、XmlUtils.marshaltoStringを使用することです。

于 2012-07-11T12:48:50.427 に答える