5

I am new to JAXB. I am able to populate the XML. In my case I need my namespace prefix as

<set xmlns="www.google.com"
   xmlns:myName="www.google.com">

instead of

<set xmlns="www.google.com"
   xmlns:ns2="www.google.com">

I have used package-info class and also the @XmlType annotation. Do I need to add any variable to get the desired name for the second namespace like "xmlns:MyName' instead of "xmlns:ns2"?

4

2 回答 2

3

如果您使用EclipseLink JAXB (MOXy)作为您的 JAXB 提供程序或最新版本的 JAXB RI,那么您可以执行以下操作:

包信息

您可以使用@XmlNs注解xmlns属性上的@XmlSchema注解来指定命名空间的前缀。

@XmlSchema(
    namespace="www.google.com",
    elementFormDefault = XmlNsForm.QUALIFIED,
    xmlns={
        @XmlNs(namespaceURI = "www.google.com", prefix = ""),
        @XmlNs(namespaceURI = "www.google.com", prefix = "myName"),
    })
package forum13817126;

import javax.xml.bind.annotation.*;

Java 模型

下面是我将用于此示例的简单 Java 模型。

package forum13817126;

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class Set {

}

演示代码

以下演示代码将创建域模型的实例并将其编组为 XML。

package forum13817126;

import javax.xml.bind.*;

public class Demo {

    public static void main(String[] args) throws Exception {
        JAXBContext jc = JAXBContext.newInstance(Set.class);

        Set set = new Set();

        Marshaller marshaller = jc.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        marshaller.marshal(set, System.out);
    }

}

输出

下面是运行演示代码的输出。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<myName:set xmlns="www.google.com" xmlns:myName="www.google.com"/>

了解更多信息

于 2012-12-11T10:14:07.750 回答
1

您需要xmlns在. 它的值是一个注释数组,为编组器提供建议的前缀映射。虽然在技术上允许忽略这些建议,但我发现只要没有冲突(两个不同的包为不同的 URI 建议相同的前缀),它们通常会受到尊重。@XmlSchemapackage-info

于 2012-12-11T10:08:34.007 回答