簡體   English   中英

在編組jaxb時從根元素中刪除xmlns屬性

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM