tutorial fromxml ejemplo aliasfield addimplicitcollection java xml xstream

java - fromxml - XStream y guiones bajos



xstream java tutorial (4)

Esto funcionó para mí:

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

Parece que XStream (com.thoughtworks.xstream -> xstream 1.4.2) maneja los guiones bajos en los nombres de elementos y atributos de una manera muy extraña. Necesito obtener y analizar un xml de un cliente que tenga guiones bajos en sus atributos. Este es mi primer intento con XStream y estoy un poco decepcionado, ya que esperaba evitar todos los feos análisis de XML.

Aquí proporciono una pequeña muestra de prueba para iluminar el comportamiento. El último ejemplo muestra mi problema.

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; }

Esto produce

INFO: <C1 a__b="a_b"/> INFO: a_b INFO: null

Ahora mi pregunta: ¿hay una manera de hacer que XStream entienda un solo guión bajo?


Solía:

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

y funcionó muy bien! Estoy usando la versión 1.4.5 de x-stream. ¡Espero eso ayude!


Trabajó para mi:

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


XStream usa el guión bajo para escapar de los caracteres en identificadores que son válidos en Java pero no válidos en XML (consulte here ). Así que el subrayado en sí tiene que ser escapado. Puede usar un NameCoder personalizado como se describe en las Preguntas frecuentes.

Dicho esto, normalmente puedo NoNameCoder bien con el NoNameCoder . Pero: No utilice guiones bajos en los identificadores de propiedad de Java, si es posible; es atípico para Java y contra las Convenciones de nomenclatura de Java .