使用Jackson / FasterXML读取XML时如何忽略某些元素?

问题描述 投票:0回答:1

我想跳过除first_name,node100及其子代之外的所有节点。我有这个XML(实际上我有很多员工,每个员工标签都有很多节点):

 <employees>
        <employee>
            <first_name>John</first_name>
            <last_name>Doe</last_name>
            <age>26</age>
        </employee>
        <employee>
            <first_name>Peter</first_name>
            <last_name>Parker</last_name>
            <age>30</age>
        </employee>
    </employees>

我能够使用Jackson的FasterXML进行阅读。我创建了2个POJOS来映射上面的XML结构

  @JacksonXmlRootElement(localName = "employees") public final class Employees {
        @JacksonXmlElementWrapper(localName = "employee", useWrapping = false)
        private Employee[] employee;
//ommiteed getter and setters

public final class Employee {
    @JacksonXmlProperty(localName = "id", isAttribute = true)
    private String id;
    @JacksonXmlProperty(localName = "first_name")
    private String firstName;
    @JacksonXmlProperty(localName = "last_name")
    private String lastName;
    @JacksonXmlProperty(localName = "age")
    private int age;

现在在生产中,xml节点内有1000s个节点

<employee>
                <first_name>John</first_name>
                <last_name>Doe</last_name>
                <age>26</age>
                <node1>  </node1>
                <node2>  </node2>

                ..

                <node100> 
                   <values> 
                  <value> val1 </value>
                  <value> val1 </value>
                  <value> val1 </value>
                  <value> val1 </value>
                  </node100> 

            </employee>


    <node100>  is also inside 4-5 nodes (which i have not shown above).

所以,我的问题是如何只读取first_name,last_name和tag。我的POJO类的结构应该是什么?

将XML转换为POJO的代码

System.out.println( " hello");
ObjectMapper objectMapper = new XmlMapper();
// Reads from XML and converts to POJO
Employees employees = objectMapper.readValue(
        StringUtils.toEncodedString(Files.readAllBytes(Paths.get("C:\\Users\\91895\\Downloads\\File\\XmlFile.xml")), StandardCharsets.UTF_8),
        Employees.class);
System.out.println(employees);
java xml jackson jackson-dataformat-xml
1个回答
0
投票

在您的类中,定义要从XML读取的元素。要忽略其他元素,请相应地配置ObjectMapper:

© www.soinside.com 2019 - 2024. All rights reserved.