有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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>

我想在Flights节点下获取数据。我正在使用com.fasterxml.jackson.dataformat2.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值。 有人能帮我吗?我想用idname获取List<Flight>对象


共 (1) 个答案

  1. # 1 楼答案

    最简单的解决方案是创建包装类:

    class Campaign {
        @JacksonXmlElementWrapper(localName = "flights")
        private List<Flight> flights;
    
        // getters, setters, toString
    }
    

    之后,您可以按如下方式对其进行反序列化:

    List<Flight> flights = xmlMapper.readValue(xmlFile, Campaign.class).getFlights();