如何在给定元素后反序列化 XML 并获取特定键的值
Posted
技术标签:
【中文标题】如何在给定元素后反序列化 XML 并获取特定键的值【英文标题】:How to deserialize XML and get value of specific key after given element 【发布时间】:2020-03-21 15:35:34 【问题描述】:我有XML
喜欢:
<campaign>
<id type="integer">123</id>
<name>campaign1</name>
<description>campaign1</description>
<flights type="array">
<flight>
<id type="integer">987</id>
<name>flight1</name>
</flight>
<flight>
<id type="integer">3254</id>
<name>flight2</name>
</flight>
</flights>
</campaign>
我想在航班节点下获取数据。我使用的是com.fasterxml.jackson.dataformat
的2.8.0
版本。
我正在使用代码: 飞行等级
@Getter
@JacksonXmlRootElement(localName = "flight")
public class Flight
@JsonProperty("id")
private String id;
@JsonProperty("name")
private String name;
测试类:
ObjectMapper flightMapper = new XmlMapper();
flightMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
Flight flight = flightMapper.readValue(xmlString, Flight.class);
但这总是给我广告系列的 ID 和名称。我得到的输出是
id = 123
name = campaign1
我也尝试过使用:
List<Flight> flights = flightMapper.readValue(xmlString, new TypeReference<List<Flight>>() );
但这总是返回null
值。
谁能帮帮我吗?我想用id
和name
获取List<Flight>
对象。
【问题讨论】:
【参考方案1】:最简单的解决方案是创建包装类:
class Campaign
@JacksonXmlElementWrapper(localName = "flights")
private List<Flight> flights;
// getters, setters, toString
之后你可以像下面这样反序列化它:
List<Flight> flights = xmlMapper.readValue(xmlFile, Campaign.class).getFlights();
【讨论】:
这几乎没有改变。刚刚在声明 List2.9.9
中,它无需额外注释即可工作。你用的是哪个版本?
我用的是2.8.0版以上是关于如何在给定元素后反序列化 XML 并获取特定键的值的主要内容,如果未能解决你的问题,请参考以下文章