Java:编组对象 – 在xml中删除额外的ns2注释
我试图根据定义的模式将对象中的数据编组到xml文件中。 但是,当我打印出xml文件时,我在xml标签上收到了额外的注释。 有没有办法摆脱额外的命名空间注释(即ns2)
这是我从编组中收到的xml的一个例子。
steak water
我想要的是这样的:
steak water
这就是我的Java代码正在做的事情:
JAXBContext context = JAXBContext.newInstance("com.schema"); JAXBElement element = new JAXBElement (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);
任何帮助深表感谢! 谢谢!
通过向用于构造JAXB元素的QName
添加名称空间URI(“http://www.something.com/something”),并利用包级别@XmlSchema
注释将获得您正在寻找的名称空间限定:
包信息
@XmlSchema( namespace="http://www.something.com/something", elementFormDefault=XmlNsForm.QUALIFIED) package forum7014746; import javax.xml.bind.annotation.*;
餐饮
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; } }
演示
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 element = new JAXBElement (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); } }
产量
water steak
添加到xsd架构定义elementFormDefault和attributeFormDefault :
谢谢你的回答。 只是为了给出示例代码:
marshaller.marshal(new JAXBElement(new QName(**""**,"Document"),Document.class,swiftDoc), sw);
后:
marshaller.marshal(new JAXBElement(new QName(**"http://www.w3.org/2001/XMLSchema**","Document"),Document.class,swiftDoc), sw);
并删除了额外的“ns:”。