0

コード jdom を jdom2.0.5 にアップグレードしています。私の以前のコードは、

JDOM 1.0

XMLOutputter outputter = new XMLOutputter("  ", true);
outputter.setIndent(true);

現在、次のような Format クラスを使用しています。

JDOM 2.0.5

Format format = Format.getRawFormat();
format.setIndent("  ");
format.setTextMode(Format.TextMode.TRIM);
XMLOutputter outputter = new XMLOutputter(format);

またはFormat.getPrettyFormat()を使用できます。

新しいコードから「format.setTextMode(Format.TextMode.TRIM)」行を削除すると、古い動作と互換性がなくなります。TRIM を使用すると、以前の動作のような出力が得られます。しかし、以前のコードでは TRIM 部分を使用しませんでした。

以前のコードと新しいコードに TRIM を含めると、次のような出力が得られます。

<Config>
  <Description>Basic 01</Description>
  <CartViews>BasicAndDetailed</CartViews>
  <CartView>Basic</CartView>
  <DetailsInReview>true</DetailsInReview>
  <HeaderInReview>true</HeaderInReview>
  <AddressVisibility>Hide</AddressVisibility>
  <Visibility>Hide</Visibility>
</Config>

新しいコードで TRIM 部分を削除すると、次のような出力が得られます。

<Config>
  <Description>
    Basic 01
  </Description><CartViews>
    BasicAndDetailed
  </CartViews><CartView>
    Basic
  </CartView><DetailsInReview>
    true
  </DetailsInReview><HeaderInReview>
    true
  </HeaderInReview><AddressVisibility>
    Hide
  </AddressVisibility><Visibility>
    Hide
  </Visibility>
</Config>

これは間違った行動として指摘されました。

TRIM が必要な理由が見つかりませんでした。

これについて私を助けてもらえますか?

4

1 に答える 1

0

誰かがこのように Format を使用している (私は JDOM を維持している) と聞いたのはこれが 2 回目です... JDOM 1.x と 2.x の違いを取得しています。

BUT: JDOM 1.x を使い慣れた方法で使用していませんでした.... コンストラクターnew XMLOutputter(" ", true);が存在しません.... どこから入手したのですか?

とにかく、TextMode.RAW メカニズム (デフォルト) には、他の TextMode オプションとは非常に異なる出力プロセスがあります。現実には、インデントは常に無視される必要があるため、setIndent() 値を常に無視する必要がある TextMode.RAW には潜在的なバグがあります。

だから、私Format.getPrettyFormat()はあなたが望むものだと信じているので、それを使うべきです.

これについてさらに議論したい場合は、jdom-interest メーリング リストに気軽にメールしてください。直接対応できます。

于 2013-10-31T12:59:28.800 に答える