【问题标题】:How to parse XML with repeated XML tags into a POJO using Jackson?如何使用 Jackson 将带有重复 XML 标签的 XML 解析为 POJO?
【发布时间】:2016-11-21 01:49:36
【问题描述】:

我在使用 Jackson 将此 XML 解析为 POJO 时遇到问题。我已经阅读了关于制作类以将 XML 反序列化为 POJOS 的所有先前描述,但我不断收到 Null 指针或没有 END 的元素警告。我非常困惑,非常感谢任何帮助。

输入的xml是

                 <row>               
                    <entry align="right" valign="top">20</entry>
                    <entry align="right" valign="top">1A</entry>
                    <entry valign="top">SData</entry>
                    <entry align="center" valign="top">2</entry>
                    <entry valign="top">binary</entry>
                    <entry valign="top">Java enterprise</entry>
                </row>

我使用的代码是;

static void testSmallXml(){
    String big = null;
    try
    {
        big = readFileToString("other/testXML/NewFile.xml");
    } catch (IOException e)
    {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    XmlMapper xmlMapper = new XmlMapper();


    String small = big.substring(big.lastIndexOf("<row>"), big.lastIndexOf("</row>")+8);

        try
        {
            rows in =  xmlMapper.readValue(small, rows.class);
            System.out.println(in.entries[0].value);
        } catch (IOException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }           

        System.out.println(small);

}

我的 POJO 类是

@JacksonXmlRootElement(localName = "row")
@JsonIgnoreProperties(ignoreUnknown = true)
public static class rows{   
    @JacksonXmlProperty(localName = "entry")
    public entry[] entries;
}

@JacksonXmlRootElement(localName = "entry")
@JsonIgnoreProperties(ignoreUnknown = true)
public static class entry{  

    @JacksonXmlProperty(isAttribute = true)
    private String align;

    @JacksonXmlProperty(isAttribute = true)
    private String valign;

    @JacksonXmlText
    public String value;

}

我不断收到空指针异常
rows["entry"]->Object[][2])

【问题讨论】:

    标签: jackson pojo


    【解决方案1】:

    试试这个:

    @JacksonXmlRootElement(localName = "row")
    public static class rows {
        @JacksonXmlElementWrapper(useWrapping=false)
        @JacksonXmlProperty(localName = "entry")
        public entry[] entries;
    }
    
    public static class entry {
        @JacksonXmlProperty(isAttribute = true)
        private String align;
    
        @JacksonXmlProperty(isAttribute = true)
        private String valign;
    
        @JacksonXmlText
        public String value;
    }
    

    【讨论】:

    • 您好 Teppic,非常感谢。这最终奏效了。我想知道你是否有任何想法为下一步做这件事?就像
    • 附注:如果您下次在问题中添加java 标签,您将更快获得帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-30
    • 2014-01-31
    • 1970-01-01
    • 2020-12-11
    • 2023-03-24
    相关资源
    最近更新 更多