【问题标题】:xml to java object via JAXB通过 JAXB 将 xml 转换为 java 对象
【发布时间】:2014-04-12 18:01:55
【问题描述】:

我有以下带有 measurement 部分的 xml,我想将其转换为 java 对象。但我对本节设计 POJO 的对象有疑问。你能帮我吗?谢谢

<root_element>
   <element>some_value</element>
   <element>some_value</element>     // SOME OTHERS ELEMENT'S
   <element>some_value</element>
   <measurement>                     // BEGINING OF THE SECTION WHERE I HAVE A PROBLEM
       <component>SO2</component>
       <averaged_time>
            <averaged_hours>1</averaged_hours>
            <value>9.054</value>
       </averaged_time>
       <component>NO2</component>
       <averaged_time>
            <averaged_hours>1</averaged_hours>
            <value>14.155</value>
       </averaged_time>
   </measurement>                    // END OF THE SECTION WHERE I HAVE A PROBLEM
   <element>some_value</element>
</root_element>

我有这样的东西(我没有在这里写其他参数,那些工作没有问题)。 JAXB 在Measurement 中返回我最后一个“组件”和“averaged_time”元素。我知道ArrayList &lt;Measurement&gt; 是不好的方法。

@XmlRootElement
public class root_element {

      private ArrayList<Measurement> measurements;

      public ArrayList<Measurement> getMeasurements() {
            return measurements;
      }

      @XmlElement (name = "measurement")
      public void setMeasurement(ArrayList<Measurement> measurements) {
            this.measurements = measurements;
      }
}

测量对象

public class Measurement {

    private String component;
    private AveragedTime averagedTime;  

    public String getComponent() {
        return component;
    }

    @XmlElement (name = "component")
    public void setComponent(String component) {
        this.component = component;
    }

    public AveragedTime getAveragedTime() {
        return averagedTime;
    }

    @XmlElement (name = "averaged_time")
    public void setAveragedTime(AveragedTime averagedTime) {
        this.averagedTime = averagedTime;
    }
}

平均时间对象

public class AveragedTime {

        private int averaged_hours;
        private double value;

        public int getAveraged_hours() {
            return averaged_hours;
        }

        @XmlElement (name = "averaged_hours")
        public void setAveraged_hours(int averaged_hours) {
            this.averaged_hours = averaged_hours;
        }

        public double getValue() {
            return value;
        }

        @XmlElement (name = "value")
        public void setValue(double value) {
            this.value = value;
        }

【问题讨论】:

    标签: java jaxb


    【解决方案1】:

    我看到的XML问题,应该是

    <root_element>
       <element>some_value</element>
       <element>some_value</element>     // SOME OTHERS ELEMENT'S
       <element>some_value</element>
       <measurement>                     // BEGINING OF THE SECTION WHERE I HAVE A PROBLEM
           <component>SO2</component>
           <averaged_time>
                <averaged_hours>1</averaged_hours>
                <value>9.054</value>
           </averaged_time>
       </measurement>
       <measurement>   
           <component>NO2</component>
           <averaged_time>
                <averaged_hours>1</averaged_hours>
                <value>14.155</value>
           </averaged_time>
       </measurement>                    // END OF THE SECTION WHERE I HAVE A PROBLEM
       <element>some_value</element>
    </root_element>
    

    让你所有的 POJO 看起来都很好,即按照上面建议的 xml 同步。

    否则,如果您需要继续使用现有的 XML,请按如下方式更改您的类:

    @XmlRootElement
    public class root_element {
    
          private Measurement measurements;
    
         //getter-setters
    }
    

    测量类

    public class Measurement {
    
        private List<String> component;
        private List<AveragedTime> averagedTime;  
    
        //getter-setters
    
     }
    

    休息一切似乎都很好。

    【讨论】:

    • 是的,我知道,但这不是我的 xml :( 我只需要解析它。
    • @Samot 更新了答案,但如果可能,请按照答案上部的建议更改您的 xml 架构。
    • 谢谢,它有效。不,很遗憾我不能更改 XML 模式,因为这个 xml 来自捷克水文气象研究所网站,是的,国家研究所不能正确地做 xml 模式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-10
    • 1970-01-01
    • 2019-04-29
    相关资源
    最近更新 更多