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架构定义elementFormDefaultattributeFormDefault

  

谢谢你的回答。 只是为了给出示例代码:

  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:”。