[英]remove xmlns attribute from the root element while marshalling jaxb
這可能與JAXB Marshaller有關 - 如何抑制xmlns命名空間屬性?
但我的問題有點不同。 我做常規java編組,我的xsd沒有名稱空間。生成的xml也沒有名稱空間,除了根元素。
<?xml version="1.0" encoding="UTF-8"?><rootElement xmlns:ns2="unwanted namespace">
unwanted namespace
來自同一個項目中的另一個模式,我不確定為什么會在此階段獲取它。
我的rootElement.java由jaxb2-maven-plugin生成,如下所示:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"feed"
})
@XmlRootElement(name = "rootElement", namespace = "")
public class RootElement{
....
}
此時我想要的是從生成的xml中刪除xmlns:ns2="unwanted namespace"
屬性,我正在努力解決它。
我查看了我的package-info.java,它看起來像:
@javax.xml.bind.annotation.XmlSchema(namespace = "unwanted namespace", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
package com.mypackage;
我嘗試添加他-npa
但由於某種原因它不能用於jaxb2-maven-plugin
。 我嘗試了NamespaceMapper
但它適用於更改前綴。 我無法完全刪除名稱空間。 這讓我困擾了一天。
我目前有類似的要求。 唯一對我有用的解決方案是為XMLStreamWriter實現一個包裝器。
請在這里看看我的答案。 我還介紹了我試過的其他解決方案。
使用上面鏈接中的代碼進行序列化如下所示:
XMLOutputFactory factory = XMLOutputFactory.newFactory();
StringWriter writer = new StringWriter(XML_BUFFER_INITIAL_SIZE);
XMLStreamWriter xmlWriter = null;
try {
xmlWriter = factory.createXMLStreamWriter(writer);
JAXBContext context = JAXBContext.newInstance(MyJAXBGeneratedClass.class);
Marshaller marshaller = context.createMarshaller();
marshaller.marshal(reportContainer, new NamespaceStrippingXMLStreamWriter(xmlWriter));
xmlWriter.flush();
}
finally {
if (xmlWriter != null)
xmlWriter.close();
}
return writer.toString();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.