首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JAXB抑制XSI和xmlns

JAXB抑制XSI和xmlns
EN

Stack Overflow用户
提问于 2010-09-22 20:03:30
回答 1查看 5.3K关注 0票数 3

我正在使用JAXB来分配一些groovy对象。我得到了这样的输出:

代码语言:javascript
复制
<desiredskillslist>
 <employeeDesiredSkills xsi:type="employeeDesiredSkill" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
     <name>C Development</name>
 </employeeDesiredSkills>
 <employeeDesiredSkills xsi:type="employeeDesiredSkill" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
     <name>Perl Development</name>
 </employeeDesiredSkills>
 <employeeDesiredSkills xsi:type="employeeDesiredSkill" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
     <name>Java Development</name>
 </employeeDesiredSkills>
 <employeeDesiredSkills xsi:type="employeeDesiredSkill" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
     <name>Database Design</name>
 </employeeDesiredSkills>
 <employeeDesiredSkills xsi:type="employeeDesiredSkill" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
     <name>Grails Development</name>
 </employeeDesiredSkills>

我真的不希望xsi:type=xmlns:xsi=出现在我的最终文档中,因为它不需要它。这个是可能的吗?

此外,我还设置了一个@XmlElementWrapper(name="desiredskillslist"),将标签放在employeeDesiredSkills周围,但如果可能的话,我将完全没有<employeeDesiredSkillsT>标签--如果itw只是一个名字列表,那就太好了。为什么当我注释ArrayList时,它是这样出现的?

EN

回答 1

Stack Overflow用户

发布于 2010-09-27 16:10:39

我真的不希望xsi:type=和xmlns:xsi=出现在我的最终文档中,因为它不需要它。这有可能吗?

我不知道为什么xsi:type会出现在你面前。正如您在下面的示例中所看到的,它通常不会出现。您的模型与下面的示例有哪些不同的类型?

--我根本就没有标签--如果它只是名字列表,那就太好了。

我相信通过@XmlValue注释可以实现您想要的结果。请参见下面DesiredSkill类上的name属性:

代码语言:javascript
复制
import java.util.*;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class Root {

    private List<DesiredSkill> employeeDesiredSkills = new ArrayList<DesiredSkill>();

    public List<DesiredSkill> getEmployeeDesiredSkills() {
        return employeeDesiredSkills;
    }

    public void setEmployeeDesiredSkills(List<DesiredSkill> employeeDesiredSkills) {
        this.employeeDesiredSkills = employeeDesiredSkills;
    }

}

以及:

代码语言:javascript
复制
import javax.xml.bind.annotation.XmlValue;

public class DesiredSkill {

    private String name;

    @XmlValue
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}

然后是以下代码:

代码语言:javascript
复制
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;

public class Demo {

    public static void main(String[] args) throws Exception {
        Root root = new Root();

        DesiredSkill cDev = new DesiredSkill();
        cDev.setName("C Development");
        root.getEmployeeDesiredSkills().add(cDev);

        DesiredSkill perlDev = new DesiredSkill();
        perlDev.setName("Perl Development");
        root.getEmployeeDesiredSkills().add(perlDev);

        JAXBContext jc = JAXBContext.newInstance(Root.class);
        Marshaller marshaller = jc.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        marshaller.marshal(root, System.out);
    }
}

将产生:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<root>
    <employeeDesiredSkills>C Development</employeeDesiredSkills>
    <employeeDesiredSkills>Perl Development</employeeDesiredSkills>
</root>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3773156

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档