代码之家  ›  专栏  ›  技术社区  ›  Shi Zhang

基于名称标记和所需标记(XML、JAXB、Java)的解组

  •  1
  • Shi Zhang  · 技术社区  · 7 年前

    正确地

    <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>
    

    我怎样才能解开这个并存储 必修的 字段到我的 物体?最好作为每个 对象

    @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;
        }
    }
    

    Field类

    @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();
        }
    }
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   Jesper    7 年前

    添加带有 @XmlAttribute 类的注释 Group Field

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