JAXB unmarshal XML elements to HashMap

前端 未结 2 1733
故里飘歌
故里飘歌 2021-01-21 14:20

I found a lot of articles that describe how to unmarshal a sequence of XML elements to a HashMap as long as they are within a \"parent\" element. However, I do not get this to w

2条回答
  •  无人及你
    2021-01-21 15:11

    How are you generaing the JAXB classes? I am not sure what exactly are you trying to do but the below very simple code works for me ..

        JAXBContext jc = JAXBContext.newInstance(ChecksType.class);
    
        Unmarshaller unmarshaller = jc.createUnmarshaller();
        ChecksType chksType = (ChecksType) unmarshaller.unmarshal(new File("/path/to/xml"));
    
        Marshaller marshaller = jc.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        marshaller.marshal(chksType, System.out);
    
        System.err.println(chksType.getCheck().get(0).getKey());
    
        for (CheckType checkType : chksType.getCheck()) {
            System.out.println("key = " + checkType.getKey() + ", " + checkType);
        }
    

    and here is my JAXB generated classes .. ChecksType (Root element)

       @XmlAccessorType(XmlAccessType.FIELD)
       @XmlType(name = "checksType", propOrder = { "check" })
       @XmlRootElement(name = "checks")
       public class ChecksType {
    
             @XmlElement(required = true)
             protected List check;
    
    
            public List getCheck() {
               if (check == null) {
                 check = new ArrayList();
               }
               return this.check;
            }
    
       }
    

    And checkType (the child)

        @XmlAccessorType(XmlAccessType.FIELD)
        @XmlType(name = "checkType")
        public class CheckType {
    
             @XmlAttribute(name = "key")
             protected String key;
    
    
             public String getKey() {
                return key;
             }
    
    
             public void setKey(String value) {
                this.key = value;
             }
    
       }
    

提交回复
热议问题