在JDOM2中的Format类中setTextMode(Format.TextMode.TRIM)的影响

时间:2013-10-31 12:10:31

标签: java xml xml-parsing jdom jdom-2

我正在将我的代码jdom升级到jdom2.0.5。我之前的代码是,

JDOM 1.0

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

现在我使用的格式类如下,

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的原因。

你能帮帮我吗?

1 个答案:

答案 0 :(得分:0)

这是我第二次听到(我维护JDOM)某人使用Format这种方式......并且在JDOM 1.x和2.x之间获得差异。

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

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

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

如果你想讨论这个,请随时邮寄jdom-interest邮件列表,我们可以直接对应。