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

这是我第二次听说(我维护 JDOM)有人以这种方式使用 Format ......并了解 JDOM 1.x 和 2.x 之间的差异。

但是:您没有以熟悉的方式使用 JDOM 1.x....构造函数new XMLOutputter(" ", true);不存在....您从哪里得到的?

无论如何,TextMode.RAW 机制(默认)与其他 TextMode 选项的输出过程非常不同。现实情况是 TextMode.RAW 存在一个潜在的错误,它应该始终忽略 setIndent() 值,因为应该始终忽略缩进。

所以,我相信Format.getPrettyFormat()这是你想要的,所以你应该使用它。

如果您想更多地讨论这个问题,请随时发送 jdom-interest 邮件列表,我们可以直接对应。

于 2013-10-31T12:59:28.800 回答