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

cra*_*hie 9 java xml jaxb

我正在尝试使用jaxb生成xml.我创建了xsd并生成了java类.但是当我生成xml时,我将前缀ns2加入到根标记中,这是我不想要的.

例如:我想要root标签

 <report>
   <id>rep 1</id>
</report>
Run Code Online (Sandbox Code Playgroud)

,但得到

<ns2:report>
....
</ns2:report>
Run Code Online (Sandbox Code Playgroud)

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

有人可以帮助

bdo*_*han 12

如果这是你的班级:

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;
    }

}
Run Code Online (Sandbox Code Playgroud)

然后在根元素上有一个前缀是有道理的,因为你已经指定"root"元素是名称空间限定的而"id"元素不是.

<ns2:report xmlns:ns2="urn:report">
    <id>123</id>
</ns2:report>
Run Code Online (Sandbox Code Playgroud)

如果将package-info类添加到模型中,则可以显示@XmlSchema注释:

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

import javax.xml.bind.annotation.XmlNsForm;
import javax.xml.bind.annotation.XmlSchema;
Run Code Online (Sandbox Code Playgroud)

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

<report xmlns="urn:report">
    <id>123</id>
</report>
Run Code Online (Sandbox Code Playgroud)

有关JAXB和命名空间的更多信息,请参阅: