java - 移除 ns2 作为默认命名空间前缀

标签 java xml jaxb

我有一个使用默认命名空间打印的文件。元素以 ns2 前缀打印,我需要将其删除,我的代码如何:

<ns2:foo xmlns:ns2="http://namespace" />

我希望它是怎样的:

<foo xmlns="http://namespace" />

这就是我的编码方式,我认为这应该足以让 ns2 消失:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:bar="http://namespace" targetNamespace="http://namespace"
    elementFormDefault="qualified">
...

生成的包信息是这样的:

@javax.xml.bind.annotation.XmlSchema(namespace = "http://namespace", 
    elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
package com.foo.bar;

我这样创建文件:

JAXBContext jaxbContext = JAXBContext.newInstance(generatedClassesPackage);
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
marshaller.marshal(new JAXBElement<Foo>(new QName("http://namespace", "Foo"),
Foo.class, rootFoo), outputStream);

generatedClassesPackage 是 package-info.java 和元素所在的包。

Foo 对象已定义并具有如下元素::

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
    "group"
})
@XmlRootElement(name = "Foo")
public class Foo {

    @XmlElement(name = "Group", required = true)
    protected List<Group> group;

我错过了什么吗?还是我误解了它的工作原理?

最佳答案

所有你需要做的 2 是当你打开一个新包时选择创建包信息 在包信息中添加以下注释或根据需要更改它

@javax.xml.bind.annotation.XmlSchema(namespace = "http://www.sitemaps.org/schemas/sitemap/0.9", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED, xmlns = { @javax.xml.bind.annotation.XmlNs(namespaceURI = "http://www.sitemaps.org/schemas/sitemap/0.9", prefix = "") })

这将删除 ns2 前缀

关于java - 移除 ns2 作为默认命名空间前缀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16589600/

相关文章:

java - 从二维数组中查找唯一的总和,其中每个数组贡献一个值,该值的总和必须是唯一的

java - Android libwebp 编码

java - 相位监听器和命令按钮

java - Controller 和过滤器已初始化但未被调用

java - 在 Android 中使用简单 XML 解析 XML 文件列表元素

带有 JAXB 类包装器的 Java Unmarshal 对象列表

java - 如何通过 SOAP UI 与 CDATA 中的 CDATA 向 Java 应用程序发送请求?

c# - 继承现有的 .Net 类序列化错误

java - 动态定义的 web 方法参数

java - 在 Jersey 中使用 JAXB 解析 JSON