Tengo la siguiente estructura XML, que está modelando un único concepto en múltiples elementos XML. Este formato no está bajo mi control.JAXB desmaterialización de múltiples elementos XML en una sola clase
<Output>
<Wrapper>
<Channel>
<id>1</id>
<type>x</type>
</Channel>
<Channel>
<id>2</id>
<type>y</type>
</Channel>
<ChannelName>
<id>1</id>
<name>Channel name</name>
</ChannelName>
<ChannelName>
<id>2</id>
<name>Another channel name</name>
</ChannelName>
</Wrapper>
</Output>
Quiero modelar esto en una base de datos que tiene control sobre y puede tener un más sencilla tabla de Channel
con id
, type
y name
campos. Por lo tanto, me gustaría separarme en un solo List<Channel>
en la clase Wrapper
.
¿Se puede hacer esto con @Xml...
anotaciones automáticamente? Actualmente estoy usando JAXB para unificar en listas de clases @XmlElement(name="Channel")
y @XmlElement(name="ChannelName")
y luego procesar el transitorio ChannelName/name
en el Channel
, pero estoy pensando que debe haber una forma automatizada más fácil de asignar estos elementos. ¿O es un trabajo para XSLT?
Puede ser útil saber que el archivo XML está entrando como un archivo POST de HTTP y estoy usando Spring 3, Java e Hibernate. Estoy esperando algo en EclipseLink JAXB (MOXy) podría ayudar :)
Esperaba que estuvieras en @Blaise :) Eché un vistazo a XmlPath pero no pude encontrar la forma de buscar un nombre para un ID determinado. Así que cuando desempaque el primer 'Channel', el XPath que quiero recoger es' ChannelName [id = "1"]/name' pero no pude ver cómo conectar el 'id'. Tendré un mira tu blog ahora mismo – andyb
@andyb: Actualmente estamos trabajando en una función relacionada (consulte https://bugs.eclipse.org/339596). La fase inicial está dirigida a las condiciones del atributo (es decir ChannelName [@ id = "1"]/Name). ¿Necesitas alinearte o simplemente desempatar? –
@Blaise - Solo necesito desmantelar y parece que la característica de predicado podría ser la solución, ya que necesito tomar datos de elementos en otras partes del documento. Además, he revisado tu (excelente) blog y casi he conseguido que MOXy funcione en Spring. Me tomó un tiempo entender acerca de los archivos jaxb.properties y jaxb.index. Actualmente estoy obteniendo una 'clase org.springframework.oxm.jaxb.Jaxb2Marshaller $ ByteArrayDataSource requiere una excepción de constructor de argumento cero '. Estoy usando Eclipse Persistence Services 2.3.0.v20110312-r9123 – andyb