看起来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("<C1 a_b=\"a_b\"/>"); Logger.info(c.a_b); } } @XStreamAlias("C1") class C1 { @XStreamAsAttribute String a_b; }
这个输出
INFO: <C1 a__b="a_b"/> INFO: a_b INFO: null
现在我的问题-有没有办法让XStream理解单个下划线?
XStream使用下划线转义标识符中的字符,这些标识符在Java中有效而在XML中无效(请参阅此处)。因此,下划线本身必须逃脱。您可以NameCoder按照常见问题解答中的说明使用自定义。
NameCoder
就是说我通常可以和睦相处NoNameCoder。但是:如果可能,不要在Java属性标识符中使用下划线;对于Java和违反Java命名约定而言,这是不典型的。
NoNameCoder