XStream 和下划线

Posted

技术标签:

【中文标题】XStream 和下划线【英文标题】:XStream and underscores 【发布时间】:2012-03-09 03:14:46 【问题描述】:

看起来 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 理解单个下划线?

【问题讨论】:

【参考方案1】:

XStream 使用下划线来转义标识符中的字符,这些字符在 Java 中有效但在 XML 中无效(请参阅here)。所以下划线本身必须被转义。您可以按照常见问题解答中的说明使用自定义 NameCoder

也就是说我通常可以和NoNameCoder相处。但是:如果可能,不要在 Java 属性标识符中使用下划线;这对于 Java 和 Java Naming Conventions 来说是不典型的。

【讨论】:

非常感谢。 XStream(new StaxDriver(new NoNameCoder())) 不起作用,所以我将研究制作一个自定义的。 NoNameCoder 确实有效。根据您对 java 命名约定的建议,当我将其更改为 ab 时,我只是忘记将 @XStreamAlias("a_b") 添加到变量中。【参考方案2】:

这对我有用:

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

【讨论】:

为我工作。 XmlFriendlyReplacer() 已弃用。 太棒了。效果很好。 谢谢它真的很有帮助【参考方案3】:

我用过:

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

而且效果很好! 我正在使用 x-stream 版本 1.4.5。 希望对您有所帮助!

【讨论】:

XStream xs=new XStream (new Dom4JDriver (new NoNameCoder())); 适用于 1.4.4【参考方案4】:

为我工作:

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

【讨论】:

只能在 1.4.7 上使用 "UTF8" 而不是 "UTF_8"【参考方案5】:

我用过这个

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

它有效,但它将执行时间/解析时间增加到 4-5 分钟

【讨论】:

以上是关于XStream 和下划线的主要内容,如果未能解决你的问题,请参考以下文章

Python中单下划线和双下划线

python Python中单下划线和双下划线

是否可以在文本和下划线之间有一定高度的文本下划线?

python 类中的单下划线和双下划线的意义

python的单下划线和双下划线

Excel 字体如何加上划线,(不是下划线)例如平均值X上加一横。