代码之家  ›  专栏  ›  技术社区  ›  kvs

如何跳过字段并使用JAXB仅解组该字段的特定成员?

  •  1
  • kvs  · 技术社区  · 7 年前

    我需要解组一个已创建模型的XML文件。在XML文件中,我有一个元素名称,该名称在我的模型中是Person类型字段的成员。 我要做的是将“name”元素解组为person。但问题是XML文件中没有Person的节点,它直接指向“name”。是否有可能通过JAXB实现这一点?

    这是XML文件的简化版本:

    <root>
        <id>1</id>
        <name>Jack</name>
    </root>
    

    以下是我试图将XML解包到的模型:

    @XmlRootElement (name = "root")
    public class Container{
        @XmlElement
        int id;
    
        //how should I annotate this?
        Person person;
    }
    public class Person{
        int age;
    
        //and how should I annotate this one?
        String name;
    }
    

    我预计会发生什么: 我有一个容器 container.person.name.equals("Jack") && container.id == 1

    我试图在中设置XmlElement person Person.name (尝试了所有的组合)都没有用。

    使用这种方法(不包括XML中的person)的意义在于,我的真实代码中的这个“名称”是一个表达式,我需要对它进行处理,并为person的不同字段赋值。

    1 回复  |  直到 7 年前
        1
  •  1
  •   davidxxx    7 年前

    要进行此特定映射,请添加 name 获取并用注释 @XmlElement .
    该想法正在使用 名称 中定义的getter和setter Container 要允许JAXB依赖 Person 字段,因为它对 root 要素

    要仅允许解组,请执行以下操作:

    @XmlElement
    public void setName(String name) {
        if (person == null){
           person = new Person();
        }
        person.setName(name);
    }
    

    要同时允许编组和解编组,请执行以下操作:

    @XmlElement
    public String getName() {
         return person.getName();
    }
    
    public void setName(String name) {
        if (person == null){
           person = new Person();
        }
        person.setName(name);
    }