java - Jaxb 生成的 xml - 根元素前缀问题

标签 java xml jaxb

我正在尝试使用 jaxb 生成 xml。我创建了 xsd 并生成了 java 类。 但是当我生成 xml 时,我在根标签上添加了 ns2 前缀,这是我不想要的。

例如:我希望根标签是

 <report>
   <id>rep 1</id>
</report>

, 但得到

<ns2:report>
....
</ns2:report>

在生成的 java 类中,我给出了注释 @XmlRootElement(name="report",namespace="urn:report")

有人能帮忙吗

最佳答案

如果这是你的类(class):

package example;

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name="report",namespace="urn:report")
public class Root {

    private String id;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

}

那么根元素上有一个前缀是有意义的,因为您已经指定“root”元素是命名空间限定的,而“id”元素不是。

<ns2:report xmlns:ns2="urn:report">
    <id>123</id>
</ns2:report>

如果您将包信息类添加到您的模型,您可以利用@XmlSchema 注释:

@XmlSchema(
        namespace = "urn:report",
        elementFormDefault = XmlNsForm.QUALIFIED)
package example;

import javax.xml.bind.annotation.XmlNsForm;
import javax.xml.bind.annotation.XmlSchema;

然后 JAXB 实现可能会选择利用默认命名空间,但请注意现在所有元素都是命名空间限定的,它们可能匹配也可能不匹配您的 XML 模式:

<report xmlns="urn:report">
    <id>123</id>
</report>

有关 JAXB 和 namespace 的更多信息,请参阅:

关于java - Jaxb 生成的 xml - 根元素前缀问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4312572/

相关文章:

java - 用Java将XML文件写入计算机

xml - XSLT 和 XSL-FO : restructure XML data to dynamically create page-sequences for every page

javax.xml.bind.PropertyException : name: eclipselink. 媒体类型值:application/json

java - 使用 Xpath 表达式和 jaxb 解码 XML

java - 具有不同 xml 名称的相同响应对象

java - 使用 Maven 存储库的 Gradle 离线构建

Java 的 SHA-256 有时会返回 255 位

c# - 将元素添加到 xml 文件

java - 如何避免在java中使用带有大量变量的if语句

java - 如果 Tomcat 在 Java 中作为服务运行,则无法执行 EXE 文件