代码之家  ›  专栏  ›  技术社区  ›  Malan Jayanka

使用JAXB从XML字符串创建XML文件中包含多个组的对象

  •  0
  • Malan Jayanka  · 技术社区  · 6 年前

    我需要将XML字符串转换成java对象。

    这是XML文件

    <?xml version="1.0" encoding="UTF-8"?>
    <DATA_DS>
    <G_1>
    <TERM_ID>4</TERM_ID><NAME>30 Net</NAME>
    </G_1>
    </DATA_DS>
    

    我创造了这样的班级;

    @XmlRootElement(name = "DATA_DS")
    @XmlAccessorType(XmlAccessType.FIELD)
    public class PaymentTerm {
    
        @XmlElement(name = "TERM_ID")
        private double termId;
    
        @XmlElement(name = "NAME")
        private String termName;
    
    
    
        public double getTermId() {
            return termId;
        }
        public void setTermId(double termId) {
            this.termId = termId;
        }
        public String getTermName() {
            return termName;
        }
        public void setTermName(String termName) {
            this.termName = termName;
        }
    
    
    
    }
    

    在主班

    jaxbContext = JAXBContext.newInstance(PaymentTerm.class);
    Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
    StringReader reader = new StringReader(xmlString);
    PaymentTerm paymentTerm = (PaymentTerm) unmarshaller.unmarshal(reader);
    

    由于XML文件中存在嵌套组,因此无法正确地解编XML字符串。

    如果我从XML文件中删除G_1组,那么它将完全转换。我需要和G_1组做转换

    我要在哪里修改代码?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Andreas LppEdd    6 年前

    <DATA_DS> 包含一个元素, <G_1> ,它本身包含两个元素, <TERM_ID> <NAME> ,因此您的对象需要反映这一点,即表示 <数据> 必须有一个字段,类型为表示 <G_1> ,其中必须有两个字段。

    我要在哪里修改代码?

    你需要为 <G_1> :

    @XmlRootElement(name = "DATA_DS")
    @XmlAccessorType(XmlAccessType.FIELD)
    public class PaymentTerm {
    
        @XmlElement(name = "G_1", required = true)
        private PaymentGroup group;
    
    }
    
    @XmlAccessorType(XmlAccessType.FIELD)
    public class PaymentGroup {
    
        @XmlElement(name = "TERM_ID", required = true)
        private double termId;
    
        @XmlElement(name = "NAME", required = true)
        private String termName;
    
    }
    

    你也应该考虑为什么 <G_1> 存在,例如可以不止一个 <G_1> 里面 <数据> ? 如果是,请列一个清单:

    @XmlElement(name = "G_1", required = true)
    private List<PaymentGroup> groups;