tutorial serializar how español curso addressapp java xml jaxb marshalling xml-namespaces

how - serializar xml java



Java: Objeto de ordenación: eliminar la anotación ns2 adicional en xml (3)

Estoy tratando de reunir datos dentro de un objeto en un archivo xml basado en un esquema definido. Sin embargo, cuando imprimo el archivo xml, recibo anotaciones adicionales en las etiquetas xml. ¿Hay alguna manera de deshacerse de la anotación de espacio de nombres extra (es decir, ns2)

Este es un ejemplo del xml que recibo de la clasificación.

<?xml version="1.0" encoding="UTF-8" standalone="yes"> <root xmlns:ns2="http://www.something.com/something"> <ns2:food>steak</ns2:food> <ns2:beverage>water</ns2:beverage> </root>

Lo que quiero es algo como esto:

<?xml version="1.0" encoding="UTF-8" standalone="yes"> <root xmlns="http://www.something.com/something"> <food>steak</food> <beverage>water</beverage> </root>

Esto es lo que hace mi código Java:

JAXBContext context = JAXBContext.newInstance("com.schema"); JAXBElement<FoodSchema> element = new JAXBElement<FoodSchema> (new QName("FoodSchema"), Food.class, foodSchema); Marshaller marshaller = context.createMarshaller(); OutputStream os = new FileOutputStream(object.getFilePath()); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); marshaller.marshal(element, os);

¡Cualquier ayuda es muy apreciada! ¡Gracias!


Al agregar un URI de espacio de nombres ("http://www.something.com/something") al QName utilizado para construir el elemento JAXB, y al aprovechar la anotación @XmlSchema nivel de paquete, obtendrá la calificación de espacio de nombres que está buscando:

paquete de información

@XmlSchema( namespace="http://www.something.com/something", elementFormDefault=XmlNsForm.QUALIFIED) package forum7014746; import javax.xml.bind.annotation.*;

Comida

package forum7014746; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement public class Food { private String food; private String beverage; public String getFood() { return food; } public void setFood(String food) { this.food = food; } public String getBeverage() { return beverage; } public void setBeverage(String beverage) { this.beverage = beverage; } }

Manifestación

package forum7014746; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBElement; import javax.xml.bind.Marshaller; import javax.xml.namespace.QName; public class Demo { public static void main(String[] args) throws Exception { JAXBContext jaxbContext = JAXBContext.newInstance(Food.class); Food foodSchema = new Food(); foodSchema.setFood("steak"); foodSchema.setBeverage("water"); JAXBElement<Food> element = new JAXBElement<Food> (new QName("http://www.something.com/something","FoodSchema"), Food.class, foodSchema); Marshaller marshaller = jaxbContext.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); marshaller.marshal(element, System.out); } }

Salida

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <FoodSchema xmlns="http://www.something.com/something"> <beverage>water</beverage> <food>steak</food> </FoodSchema>


Gracias por responder. Solo para dar código de ejemplo antes:

marshaller.marshal(new JAXBElement(new QName(**""**,"Document"),Document.class,swiftDoc), sw);

después:

marshaller.marshal(new JAXBElement(new QName(**"http://www.w3.org/2001/XMLSchema**","Document"),Document.class,swiftDoc), sw);

y extra "ns:" fue eliminado.


agregar a la definición de esquema xsd elementFormDefault y attributeFormDefault :

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" ... elementFormDefault="qualified" attributeFormDefault="unqualified" ... >