【发布时间】:2011-03-18 08:54:51
【问题描述】:
我有一个由 XJC 生成的对象,名为 Product。我想将product.currentPrice (a String) 设置为£210,其中£ 是货币符号(从系统的其他地方传入)。
麻烦的是,JAXB 正在逃避我的 & 符号,所以它产生了£210。我怎样才能让它不这样做?
【问题讨论】:
我有一个由 XJC 生成的对象,名为 Product。我想将product.currentPrice (a String) 设置为£210,其中£ 是货币符号(从系统的其他地方传入)。
麻烦的是,JAXB 正在逃避我的 & 符号,所以它产生了£210。我怎样才能让它不这样做?
【问题讨论】:
XmlStreamWriter 的解决方案
final XMLOutputFactory streamWriterFactory = XMLOutputFactory.newFactory();
streamWriterFactory.setProperty("escapeCharacters", false);
【讨论】:
"Not documented, so you can't trust this to work in the future"。
如果你实现这个接口:com.sun.xml.bind.marshaller.CharacterEscapeHandler,用你自己的字符转义,但是你想将一些行为委托给传统的转义,你可以使用这些类中的任何一个(或者编写你的基于它们的自己的代码):
它们带有 JAXB RI 实现 AKA jaxb-impl-2.2.1.jar。
希望这对任何人都有帮助,就像它帮助了我一样。
【讨论】:
根据您要寻找的内容,您可以:
【讨论】:
就像 rjsang 所说,使用“UTF-8”编码时有一个错误,这是默认的。如果您不关心区分大小写的问题,请尝试使用“utf-8”并让您的自定义转义符按预期工作。 UTF-16 也可以工作,除了 "UTF-8": "uTf-8" 等等。
标准中的严重错误。
这是执行此操作的代码:
marshaller.setProperty(javax.xml.bind.Marshaller.JAXB_ENCODING, "utf-8");
【讨论】:
【讨论】:
默认情况下,JAXB 的编组器实现通常会转义字符。要更改此默认行为,您必须编写一个实现 com.sun.xml.bind.marshaller.CharacterEscapeHandler 接口的类。
在 Marshaller 中设置该处理程序
CharacterEscapeHandler escapeHandler = NoEscapeHandler.theInstance;
marshaller.setProperty("com.sun.xml.bind.characterEscapeHandler", escapeHandler);
您可以查看 JAXB 提供的示例,字符转义示例
【讨论】: