gpt4 book ai didi

xml - XStream 同时解析属性和值

转载 作者:数据小太阳 更新时间:2023-10-29 01:49:08 25 4
gpt4 key购买 nike

我有以下 XML

<search ver="3.0">
<loc id="ARBA0009" type="1">Buenos Aires, Argentina</loc>
<loc id="BRXX1283" type="1">Buenos Aires, Brazil</loc>
<loc id="ARDF0127" type="1">Aeroparque Buenos Aires, Argentina</loc>
<loc id="MXJO0669" type="1">Concepcion De Buenos Aires, Mexico</loc>
<loc id="MXPA1785" type="1">San Nicolas De Buenos Aires, Mexico</loc>
<loc id="ARBA0005" type="1">Balcarce, Argentina</loc>
<loc id="ARBA0008" type="1">Bragado, Argentina</loc>
<loc id="ARBA0010" type="1">Campana, Argentina</loc>
<loc id="ARBA0016" type="1">Chascomus, Argentina</loc>
<loc id="ARBA0019" type="1">Chivilcoy, Argentina</loc>
</search>

还有一个 City 类

public class City {

private String id;
private Integer type;
private String name;

// getters & setters...
}

我尝试了以下别名来解析 XML

xStream.alias("search", List.class);
xStream.alias("loc", City.class);
xStream.useAttributeFor("id", String.class);
xStream.useAttributeFor("type", Integer.class);

但是我不知道如何设置“loc”标签的值,如果我尝试转换我得到的 XML 中的 City 对象

<search>
<loc id="ARBA0001" type="1">
<name>Buenos Aires</name>
</loc>
</search>

当我真的需要这个的时候

<search>
<loc id="ARBA0001" type="1">Buenos Aires</loc>
</search>

然后,如果我尝试将 XML 解析为 City 对象,我会得到具有空值的字段“name”。

有人知道如何设置正确的别名来做到这一点吗?提前致谢。

最佳答案

我终于找到了解决方案,转换器解决了这个问题,这是代码

public class CityConverter implements Converter {

public void marshal(Object value, HierarchicalStreamWriter writer,
MarshallingContext context) {
City city = (City) value;
writer.addAttribute("id", city.getId());
writer.addAttribute("type", city.getType().toString());
writer.setValue(city.getName());
}

public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) {
City city = new City();
city.setName(reader.getValue());
city.setId(reader.getAttribute("id"));
city.setType(reader.getAttribute("type"));
return city;
}

public boolean canConvert(Class clazz) {
return clazz.equals(City.class);
}

}

在设置别名的部分我还设置了 CityConverter

xStream.registerConverter(new CityConverter());
xStream.alias("search", List.class);
xStream.alias("loc", City.class);

一切正常:)

关于xml - XStream 同时解析属性和值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2533800/

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