【问题标题】:remove xmlns attribute from the root element while marshalling jaxb在编组 jaxb 时从根元素中删除 xmlns 属性
【发布时间】:2013-04-03 19:17:47
【问题描述】:

这可能与JAXB Marshaller - How do I suppress xmlns namespace attributes?有关

但我的问题有点不同。 我进行常规的 java 编组,我的 xsd 没有命名空间。生成的 xml 也没有命名空间,除了根元素。

<?xml version="1.0" encoding="UTF-8"?><rootElement xmlns:ns2="unwanted namespace">

unwanted namespace 来自同一个项目的另一个模式,我不确定为什么在这个阶段会选择它。

我的 jaxb2-maven-plugin 生成的 rootElement.java 看起来像:

@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,但这适用于更改前缀。我无法让它完全删除命名空间。这让我困扰了一天。

【问题讨论】:

    标签: java xml jaxb xml-namespaces jaxb2-maven-plugin


    【解决方案1】:

    我目前有类似的要求。唯一对我有用的解决方案是实现 XMLStreamWriter 的包装器。

    请看我的回答here。我还描述了我尝试过的其他解决方案。

    使用上面链接中的代码进行序列化如下所示:

    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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-24
      • 1970-01-01
      • 2016-09-18
      • 2023-03-24
      • 1970-01-01
      • 1970-01-01
      • 2018-09-12
      相关资源
      最近更新 更多