Pregunta

Tengo objeto , árbol / modelo / jerarquía, sea cual sea el término correcto. Consiste en lo que podría caracterizarse como una asignación uno a uno del XML deseado.

Eso es lo que tengo (en una sintaxis UML no estándar)

class A {
    class B b[*]
    class C
    class D
}

class B {
    class C c[*]
    string AttributeFoo = "bar"
}

class C {
    string AttributeThis = "is"
}

class D {
    string AttributeName = "d"
}

La salida deseada es algo como esto:

<?xml version="1.0"?>
<a>
    <b attribute-foo="bar">
        <c attribute-this="is"/>
    </b>
    <c attribute-this="is"/>
    <d attribute-name="d"/>
</a>

¿Qué propondría para ser el mejor y / o la manera más sencilla de lograr este objetivo?

¿Fue útil?

Solución

Miraría a JAXB porque a) lo obtienes en la biblioteca estándar y b) no es tan complicado. Este código requiere Java 6:

@XmlRootElement public static class A {
  public List<B> b = new ArrayList<B>();
}

public static class B {
  public List<C> c = new ArrayList<C>();
  @XmlAttribute(name = "attribute-foo") public String attributeFoo = "foo";
}

public static class C {
  @XmlAttribute(name = "attribute-this") public String attributeThis = "is";
}

public static void main(String[] args) {
  A a = new A();
  a.b.add(new B());
  a.b.get(0).c.add(new C());
  JAXB.marshal(a, System.out);
}
//TODO: getters/setters, error handling and so on

Salida:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<a>
    <b attribute-foo="foo">
        <c attribute-this="is"/>
    </b>
</a>

Otros consejos

La forma más sencilla es utilizar XStream . Consulte aquí para obtener una idea de lo que hace. Puede ser un poco buggy, pero para tareas simples es genial. Para una tecnología más completa (y confiable), entonces JAXB (parte de Java6, consulte javax.xml.bind ) es la mejor opción.

Creo que es el propósito de JAXB ( http://jaxb.java.net/ ) para asignar objetos a / desde XML

Si desea utilizar herramientas, eche un vistazo a jaxb . Marshalling / Unmarshalling es lo que está haciendo aquí, es un problema común con muchas soluciones disponibles.

Creo que es lo mejor (no reinventar la rueda) y es lo más simple (lo he hecho manualmente y no es nada divertido; los gráficos de objetos pueden ser cíclicos ...)

Me gusta XMLBeans .

En mi opinión, si no te molesta demasiado el rendimiento, me mantendré alejado de Jaxb y echaré un vistazo a algunos de los marcos más simples. Si el rendimiento es un problema, tiendo a preferir jibx sobre jaxb para la mayoría de las situaciones.

En esta situación tiendo a usar el proyecto simple.

http://simple.sourceforge.net/download /stream/doc/tutorial/tutorial.php#start

Simplemente anota tu modelo de objeto y listo ... :-)

@Root
public class Example {

   @Element
   private String text;

   @Attribute
   private int index;

   public Example() {
      super();
   }  

   public Example(String text, int index) {
      this.text = text;
      this.index = index;
   }

   public String getMessage() {
      return text;
   }

   public int getId() {
      return index;
   }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top