【问题标题】:Define namespaces tags so that generated XML have those tags?定义命名空间标签以便生成的 XML 具有这些标签?
【发布时间】:2013-11-27 18:14:34
【问题描述】:

我有两个类 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");

        XStream xs =new XStream();

        String xml = xs.toXML(p);

        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 xstream


    【解决方案1】:

    不幸的是,根据XSTream FAQ,XStream 不支持 XML 命名空间,除非使用 StAX 解析器

    不是每个 XML 解析器都支持命名空间,也不是每个 XML 解析器都支持命名空间 支持命名空间可以在 XStream 中配置以使用它们。 基本上,命名空间必须单独支持不同的 XML 解析器和目前唯一支持的命名空间 在 XStream 中实现的是针对 StAX paser。因此使用和 配置 XStream 的 StaxDriver 以使用命名空间。

    【讨论】:

    • 好的,我可以通过 JaxB 来做吗,如果可以,请发布答案以通过它来做,这里 Xstream 对我来说并不重要,感谢您的回答
    • 是的,JAXB 可以做命名空间;见JAXB namespaces missing
    • 对不起,但这并没有说明如何在 .java 文件中放置两个不同的命名空间,只有一个命名空间 ns0。
    • 如果该问题不是您想要的,请查看那里的相关部分中的链接。如果这些都不适合您的情况,您应该提出一个新问题,而不是在 cmets 中扩展此对话。谢谢。
    • JAXB 大师 Blaise Doughan 已经给出了很好的答案。随它去吧。
    猜你喜欢
    • 1970-01-01
    • 2020-01-30
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-18
    • 2017-11-28
    • 2018-12-15
    相关资源
    最近更新 更多