【问题标题】:How to use JAXB to output an xml with Namespaces?如何使用 JAXB 输出带有命名空间的 xml?
【发布时间】:2013-11-27 18:42:42
【问题描述】:

与上一个问题相比,我可能会重复这个问题(Define namespaces tags so that generated XML have those tags?),但由于在我上一个问题中,这个范围仅限于 XStream,这就是我需要提出这个新问题的原因。

我有两个类 People.java 和 PeopleMain.java

People.java

package com.test;

public class People {

    private String name;
    private String age;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getAge() {
        return age;
    }
    public void setAge(String age) {
        this.age = age;
    }   

}

PeopleMain.java

package com.test;

import com.thoughtworks.xstream.XStream;

public class PeopleMain {

    public static void main(String args[]){

        People p= new People();

        p.setAge("21");
        p.setName("Manish Sharma");

        String xml = //JAXB code to get xml from Person p object

        System.out.println(xml);    
    }
}

我在控制台上运行 PeopleMain.java 的输出如下:

<com.test.People>
  <name>Manish Sharma</name>
  <age>21</age>
</com.test.People>

但我想要输出为

<People xmlns:ns2="http://example.com/foo" xmlns:ns3="http://example.com/bar">
  <ns2:name>Manish Sharma</ns2:name>
  <ns3:age>21</ns3:age>
</People>

我应该在我的 People.java 文件中进行哪些更改以获得所需的输出?

【问题讨论】:

  • 如果您写“请不要投票并回答”,您可能已经猜到这毕竟不是一个好问题。也许你想改进它。

标签: java xml jaxb


【解决方案1】:

您可以执行以下操作并在 @XmlElement 注释上指定命名空间:

import javax.xml.bind.annotation.*;

@XmlRootElement(name="People")
@XmlAccessorType(XmlAccessType.FIELD)
public class People {

    @XmlElement(namespace="http://example.com/foo")
    private String name;

    @XmlElement(namespace="http://example.com/bar")
    private int age;

}

更多信息

【讨论】:

    猜你喜欢
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 2018-03-27
    • 1970-01-01
    • 2013-02-13
    • 1970-01-01
    • 2016-09-21
    • 1970-01-01
    相关资源
    最近更新 更多