java - 如何在给定元素后反序列化 XML 并获取特定键的值
问题描述
我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
值。谁能帮帮我吗?我想用and获取List<Flight>
对象。id
name
解决方案
最简单的解决方案是创建包装类:
class Campaign {
@JacksonXmlElementWrapper(localName = "flights")
private List<Flight> flights;
// getters, setters, toString
}
之后,您可以按如下方式对其进行反序列化:
List<Flight> flights = xmlMapper.readValue(xmlFile, Campaign.class).getFlights();
推荐阅读
- react-native - 如何在 react-native-calendars 包中设置滚动周历的日期
- ios - SceneKit 相机导致对象不显示
- android - Android:我如何创建一个 RecyclerView,我可以在其中自由拖放一个项目来做某些事情?
- d3.js - d3.js如何绘制带有垂直x轴标签的折线图
- javascript - 如何通过操作更改 Vuex 存储对象值?(vue.js)
- user-interface - 远程进入 Linux GUI
- spring-boot - Kotlin Multiplatform 中的 Spring Boot Gradle 依赖项
- cmake - 如何在ubuntu 16.04上下载ignition-cmake2
- flutter - 无法在 IntelliJ 上连接 IOS 模拟器
- c++ - CppSQLite 抛出“LNK2019:未解析的外部符号”错误