gpt4 book ai didi

java - 使用 xstream 反序列化具有重复条目的 xml

转载 作者:行者123 更新时间:2023-11-29 06:09:21 24 4
gpt4 key购买 nike

我正在尝试读入一个 xml 文件并将其内容存储为一个对象供以后使用。我可以使用 toXML() 方法重现一个类似的对象并提供示例数据,但是当我在同一个对象上调用 fromXML() 时,我得到了一个错误。问题是我有多个字段实例。 xml 看起来像这样......

<House>   
<Address>
<Number>1234</Number>
<Street>Sample St.</Street>
<City>Sample City</City>
</Address>
<Resident>
<Name>Joe</Name>
<Age>38</Age>
<Profession>
<Title>Engineer</Title>
<Title>Developer</Title>
</Profession>
</Resident>
<Resident>
<Name>Cathy</Name>
<Age>35</Age>
<Profession>
<Title>Engineer</Title>
<Title>Developer</Title>
</Profession>
</Resident>
</House>

所以在这个例子中有两个居民,他们每个人都有两个职位。我尝试在构造函数中为它们各自的类将这些标记定义为数组列表,但这似乎不起作用。如果我只有一个 Resident 或 Title 等实例,这就可以正常工作。

这是 Java 代码(从下面的评论中复制):

XStream xstream = new XStream(new DomDriver()); 
FileReader fin = new FileReader("path_to_file.xml");
BufferedReader br = new BufferedReader(fin);

while(br.ready())
{
str += br.readLine() + "\n";
}

House house = (House)xstream.fromXML(str);


import java.util.ArrayList;


public class House {

private Address Address;
private ArrayList<Resident> Resident;

public House(Address address, ArrayList<Resident> resident) {

Address = address;
Resident = resident;
}

public Address getAddress() {
return Address;
}

public void setAddress(Address address) {
Address = address;
}

public ArrayList<Resident> getResident() {
return Resident;
}

public void setResident(ArrayList<Resident> resident) {
Resident = resident;
}

}

最佳答案

这是使用注释的方法。

@XStreamAlias("house")
public class House{

@XStreamAlias("Address")
private String address;

@XStreamImplicit
protected List<Resident> residents;

...

在 Resident 类中,您可以:

@XStreamAlias("resident")
public class Resident{

@XStreamAlias("name")
private String name;

@XStreamAlias("age")
private int age;

@XStreamAlias("profession")
private String profession;


@XStreamImplicit
protected List<String> titles

...

记得处理注释。

关于java - 使用 xstream 反序列化具有重复条目的 xml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7491195/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com