0

我正在使用 Kotlin 1.3、Java 8 和 Spring 4.0+。

只是我只想将命名空间附加到<HELLO>它的子级,而不是它的子级。但是,当我使用 @XmlRootElement 定义命名空间<HELLO>时,<HI>即使我没有定义任何命名空间,也会获得默认命名空间。

@XmlRootElement(name = "HELLO", namespace = "http://www.hello.net")
public class Hello {

    @XmlElement(name = "HI")
    protected Hi hi;

然后

    <HELLO xmlns="http://www.hello.net">
        <HI xmlns=""></HI>
    </HELLO>

有没有办法xmlns=""从中删除(默认命名空间)<HI>

仅供参考(完成答案后):

我正在使用 Kotlin 1.3 进行开发。我需要使用使用 xjc(JAXB) 从 XML 生成的 Java 类,因为程序 (API) 规范是由来自外部客户端的 XML 处理的,它将与 API 通信。

当使用没有 -npa 选项的 xjc 时,有一个package-info.java用于对仅使用两个 loc 生成的所有类应用相同的命名空间,并且我在我的项目中导出了这些类。(参考:https ://docs.oracle.com/javase/8/docs/technotes/tools/unix/xjc.html )

当我在 XmlMapper(使用 JacksonXmlModule)中注册 JaxbAnnotationModule() 时,我认为package-info.java 中的 @XmlSchema(namespace = "namespace1")效果很好。但是,杰克逊 XmlMapper 似乎并不完全支持 xml 注释。

您可以通过以下答案或添加将 xmlns 添加到 XML 的 XmlMarshaller 来解决此问题。

jackson-dataformat-xml 不支持包级别的命名空间:https ://github.com/FasterXML/jackson-dataformat-xml/issues/18

4

1 回答 1

0

如果您希望它继承http://www.hello.netXML 输出中的 ,那么您需要为其提供该名称空间。

于 2018-11-06T14:07:08.300 回答