XStream和下划线

看起来XStream(com.thoughtworks.xstream – > xstream 1.4.2)以非常奇怪的方式处理元素和属性名称中的下划线。 我需要从客户中获取并解析xml,这些客户的属性中包含下划线。 这是我第一次尝试使用XStream,我有点失望,因为我希望避免所有丑陋的xml解析。

在这里,我提供了一个小测试样本来点亮行为。 最后一个例子显示了我的问题。

public class MyTest { public void testIt() { C1 a = new C1(); a.a_b= "a_b"; XStream xstream = new XStream(); xstream.processAnnotations(C1.class); String xml = xstream.toXML(a); Logger.info(xml); C1 b = (C1) xstream.fromXML(xml); Logger.info(b.a_b); C1 c = (C1) xstream.fromXML(""); Logger.info(c.a_b); } } @XStreamAlias("C1") class C1 { @XStreamAsAttribute String a_b; } 

这输出

 INFO:  INFO: a_b INFO: null 

现在我的问题 – 有没有办法让XStream理解一个下划线?

XStream使用下划线来转义在Java中有效但在XML中无效的标识符中的字符(请参阅此处 )。 所以下划线本身必须被转义。 您可以使用FAQ中描述的自定义NameCoder

那说我通常可以与NoNameCoder 。 但是:如果可能的话,不要在Java属性标识符中使用下划线; 它对于Java和Java命名约定来说是不典型的。

这对我有用:

 XStream xs = new XStream(new DomDriver("UTF-8", new XmlFriendlyNameCoder("_-", "_"))); 

我用了:

 XmlFriendlyNameCoder nameCoder = new XmlFriendlyNameCoder("ddd", "_"); XStream xmlStream = new XStream(new Dom4JDriver(nameCoder)); 

它工作得很好! 我正在使用x-stream版本1.4.5。 希望能帮助到你!

为我工作:

 XStream xstream = new XStream(new DomDriver("UTF_8", new NoNameCoder()));