【问题标题】:Unmarshalling based on name tag and required tag (XML, JAXB, Java)基于名称标签和所需标签(XML、JAXB、Java)的解组
【发布时间】:2017-12-14 18:19:48
【问题描述】:

所以我有以下未编组的测试 xml 文件正确

<group>
    <field><testName>n</testName></field>
    <field><testName>n</testName></field>
    <field><testName>n</testName></field>
    <group>
        <field><testName>n</testName></field>
        <field><testName>n</testName></field>
    </group>
</group>

但我想将功能扩展为:

<group name="gname" required="N">
    <field name="fname" required="N"/>
    <field name="fname1" required="N"/>
    <field name="fname2" required="N"/>
    <group name="gname1" required="N">
        <field name="fname3" required="N"/>
        <field name="fname4" required="N"/>
    </group>
</group>

如何解组并将 namerequired 字段存储到我的 GroupField 对象中?最好作为每个 Group 和/或 Field 对象中的键值对。

团体课

@XmlRootElement(name = "group")
@XmlAccessorType(XmlAccessType.FIELD)
public class Group {
    @XmlElement (name = "field")
    private List<Field> fields = null;
    @XmlElement(name = "group")
    private List<Group> groups = null;

    /**
    *possibly include
    *String name = null;
    *String required = null;
    **/

    public List<Group> getGroups() {
        return this.groups;
    }

    public void setEmployees(List<Group> groups) {
        this.groups = groups;
    }

    public List<Field> getFields() {
        return fields;
    }

    public void setFields(List<Field> fields) {
        this.fields = fields;
    }
}

字段类

@XmlRootElement(name = "field")
@XmlAccessorType(XmlAccessType.FIELD)
public class Field {
    private String testName = null;

    /**
    *possibly include
    *String name = null;
    *String required = null;
    **/

    public String getName() {
        return name;
    }

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

主要

static void unMarshallingTest() throws JAXBException {
    JAXBContext jaxbContext = JAXBContext.newInstance(Group.class);
    Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();

    Group groups = (Group) unmarshaller.unmarshal(new File(
            "C:\\Users\\u589329\\IdeaProjects\\ConfigFiles\\src\\innerTest.xml"));

    for (Field f: groups.getFields()) {
        System.out.println(f.getName());
        System.out.println("here");
    }

    for (Group g: groups.getGroups()) {
        for (Field f: groups.getFields()) {
            System.out.println(f.getName());
            System.out.println("or here");
        }
    }
}

public static void main(String[] args) {
    try {
        unMarshallingTest();
    } catch (JAXBException e) {
        e.printStackTrace();
    }
}

【问题讨论】:

    标签: xml jaxb unmarshalling


    【解决方案1】:

    将带有@XmlAttribute 注释的字段添加到您的类GroupField

    @XmlAttribute
    private String name;
    
    @XmlAttribute
    private String required;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-20
      • 2018-03-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多