【问题标题】:How to write pojo class as a data model for complex xml structure如何编写 pojo 类作为复杂 xml 结构的数据模型
【发布时间】:2016-01-22 07:46:50
【问题描述】:

我正在解析一个具有相当复杂数据结构的 XML 文档。

例子:

<Companies>
    <LISTID>6353HHJDLS628JNHJ6</LISTID>

    <Company>
        <ID>123ABC</ID>
        <Value>True</Value>
        <Order>
            <Text>Because </Text>
            <ListOfReasons>
                <InputName>
                    <Text>your company did not meet requirements</Text>
                </InputName>
                <Text>, </Text>
                <InputName>
                    <Text>your company was not listed as qualified</Text>
                </InputName>
                <Text> etc...</Text>
            </ListOfReasons>
        </Order>
    </Company>

    <Company>
        <ID>123DEF</ID>
        <Value>False</Value>
        <Order>
            <Text>We can't get any more details on </Text>
            <NodeName>
                <Text>neither your company or the entity in question</Text>
            </NodeName>
            <Text> right now.</Text>
        </Order>    
    </Company>

</Companies>
</root>

我应该如何为我的 pojo 类建模?对我来说,它似乎应该有嵌套或内部类。我不确定这会是什么样子

我对 JaxB 了如指掌,但我真的不知道如何使用它,除非有一些简单的方法可以实现它,否则我更喜欢写一个 pojo,因为我理解它。

我正在解析 DOM,我想用 Java 对象来表示它。这就是编写这个模型的目的。谁能给我一个使用我展示的 XML 的示例数据模型类。任何帮助或帮助将不胜感激。

【问题讨论】:

    标签: java xml parsing dom


    【解决方案1】:

    有一个很棒的工具可以帮助您入门here

    【讨论】:

    • 从来没有见过那个工具,它很有趣。这会在所有需要的 Pojo 中自动转换 XML。最后一个想法是用@XmlRootElement@XmlArrtibute 等装饰类/成员,然后用unmarshal 将其传递给JAXB
    • @Ken 感谢您提供该工具。非常好。所以不要使用带有嵌入式内部循环的单个类?还是所有单独的类?
    • 我会为每个具有自己复杂结构的节点使用一个单独的类。这个想法是让您的对象模型反映您的数据模型。
    【解决方案2】:

    在你的情况下,有这样的类:

    @XmlRootElement
    class Companies {
      private String LISTID;
    
      private List<Company> companies;
    
      @XmlElement(name = "company")
      public void setCompany(List<Company> companies) {
      this.companies = companies;
      }
    
      @XmlElement
      public void setLISTID(String LISTID) {
       this.LISTID = LISTID; 
     }
      /** Others standard POJO Methods */
    }
    
    @XmlRootElement
    public class Company {
      private String id;
      private String value;
      private List<Order> orders;
    
      /** Like in the previous example**
    }
    

    使用上面显示的工具,您的工作只会用@Xml* 注释来装饰类。

    【讨论】:

      猜你喜欢
      • 2020-11-06
      • 2020-09-19
      • 2010-11-16
      • 1970-01-01
      • 2020-03-07
      • 1970-01-01
      • 1970-01-01
      • 2016-12-18
      • 2013-11-04
      相关资源
      最近更新 更多