我正在将我的代码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的原因。
你能帮帮我吗?
答案 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邮件列表,我们可以直接对应。