为了账号安全,请及时绑定邮箱和手机立即绑定

将复杂的 XML 转换为 Java 对象

将复杂的 XML 转换为 Java 对象

慕侠2389804 2022-07-27 21:25:15
我有一个 xml,我想将由特定标签的子级形成的子 xml 保存到一个字符串中。这是一个 xml 示例:    <?xml version="1.0" encoding="UTF-8" standalone="yes"?><SampleDTO>    <id>1</id>    <someList>        <someObject>            <amount>32</amount>            <id>1</id>            <someDescription>I am a description</someDescription>        </someObject>        <someObject>            <amount>66</amount>            <id>2</id>            <someDescription>I am another description</someDescription>        </someObject>        <someObject>            <amount>78</amount>            <id>13</id>            <someDescription>Guess what? I am a description</someDescription>        </someObject>    </someList>    <otherList>        <otherObject>            <flag>true</flag>            <id>1</id>            <otherDescription>Oh nice, a description</otherDescription>        </otherObject>    </otherList></SampleDTO>我想通过例如“someList”将子xml元素和值保存到字符串中,因为接下来我将它反序列化为java对象
查看完整描述

3 回答

?
喵喵时光机

TA贡献1846条经验 获得超7个赞

使用 JAXB 解组器将 xml 文档转换为 java 对象。首先将 JAXB 依赖项添加到项目的类路径中。了解更多信息

SampleDTO.java

@XmlRootElement

public class SampleDTO {

    private String id;

    private List<SomeList> someList;

    private List<OtherList> otherList;


    @XmlElement

    public String getId() {

        return id;

    }

    public void setId(String id) {

        this.id = id;

    }

    @XmlElement

    public List<SomeList> getSomeList() {

        return someList;

    }

    public void setSomeList(List<SomeList> someList) {

        this.someList = someList;

    }

    @XmlElement

    public List<OtherList> getOtherList() {

        return otherList;

    }

    public void setOtherList(List<OtherList> otherList) {

        this.otherList = otherList;

    }

}

SomeList.java


@XmlRootElement

public class SomeList {

    private List<SomeObject> someObject;


    @XmlElement

    public List<SomeObject> getSomeObject() {

        return someObject;

    }

    public void setSomeObject(List<SomeObject> someObject) {

        this.someObject = someObject;

    }

}

OtherList.java


@XmlRootElement

public class OtherList {

    private List<OtherObject> otherObject;


    @XmlElement

    public List<OtherObject> getOtherObject() {

        return otherObject;

    }

    public void setOtherObject(List<OtherObject> otherObject) {

        this.otherObject = otherObject;

    }

}

SomeObject.java


@XmlRootElement

public class SomeObject {

    private String amount;

    private String id;

    private String someDescription;


    @XmlElement

    public String getAmount() {

        return amount;

    }

    public void setAmount(String amount) {

        this.amount = amount;

    }

    @XmlElement

    public String getId() {

        return id;

    }

    public void setId(String id) {

        this.id = id;

    }

    @XmlElement

    public String getSomeDescription() {

        return someDescription;

    }

    public void setSomeDescription(String someDescription) {

        this.someDescription = someDescription;

    }

}

OtherObject.java


@XmlRootElement

public class OtherObject {

    private String flag;

    private String id;

    private String otherDescription;


    @XmlElement

    public String getFlag() {

        return flag;

    }

    public void setFlag(String flag) {

        this.flag = flag;

    }

    @XmlElement

    public String getId() {

        return id;

    }

    public void setId(String id) {

        this.id = id;

    }

    @XmlElement

    public String getOtherDescription() {

        return otherDescription;

    }

    public void setOtherDescription(String otherDescription) {

        this.otherDescription = otherDescription;

    }

}

使用 JAXB 解组


public class Main {

    public static void main(String[] args) {  

     try {

        File file = new File("file.xml");  

        JAXBContext jaxbContext = JAXBContext.newInstance(SampleDTO.class);  

        Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();  

        SampleDTO sampleDTO= (SampleDTO) jaxbUnmarshaller.unmarshal(file);  

      } catch (JAXBException e) {  

        e.printStackTrace();  

      }  

    }  

}


查看完整回答
反对 回复 2022-07-27
?
慕村225694

TA贡献1880条经验 获得超4个赞

有许多可用的开源 XML 处理包。我喜欢杰克逊。这是关于 Jackson XML 的 Baeldung 文章的链接

总结是这样的:

  1. 将 Jackson 依赖项添加到您的 POM。

  2. 创建一个代表您的 xml 结构的对象结构。

  3. 创建一个 XmlMapper。

  4. 使用 XmlMapper。


查看完整回答
反对 回复 2022-07-27
?
慕标5832272

TA贡献1966条经验 获得超4个赞

你的 java 类/对象应该至少有这 3 个实例变量:


private int amount

private int id

private String description

然后使用一些 xml 解析库(例如jdom2),并且对于您迭代的每个<someObject>标签,初始化您的类的一个新对象并为其分配从 xml 解析的值(数量/id/描述),并添加每个新创建的对象在列表或数组等中。


查看完整回答
反对 回复 2022-07-27
  • 3 回答
  • 0 关注
  • 269 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信