如何使用 Jackson 处理命名空间重复的 xml 标签

Posted

技术标签:

【中文标题】如何使用 Jackson 处理命名空间重复的 xml 标签【英文标题】:How to handle namespaced duplicate xml tags with Jackson 【发布时间】:2013-03-06 05:37:35 【问题描述】:

是否可以使用 Jackson 来处理基于名称空间的重复 xml 标签?

下面的代码抛出一个 JsonMappingException : Multiple fields表示属性“url”

private final ObjectMapper xmlMapper = new XmlMapper();

private static final String xml =
        "<example xmlns:test='http://test.com/'>" +
            "<test:url>www.namespace.com'</test:url>" +
            "<url>www.url.com'</url>" +
        "</example>";

@Test
public void parseXml() throws Exception 
    Example example = xmlMapper.readValue(xml, Example.class);

    assert example.namespaceUrl.equals("www.namespace.com");


public static class Example 

    @JsonProperty("url")
    public String namespaceUrl;

    @JsonProperty("url")
    public String url;


非常感谢!

【问题讨论】:

您可以使用 JAXB (JSR-222) 实现轻松处理此用例:blog.bdoughan.com/2010/08/jaxb-namespaces.html 怎么样?我的包信息中有 javax.xml.bind.annotation.XmlNsForm.QUALIFIED。杰克逊仍然在爆炸,因为它看到了两个同名的元素。有趣的是,元素名称甚至不会出现在 json 有效负载上,所以这真的无关紧要 【参考方案1】:

目前没有办法做到这一点——您不能使用仅因命名空间不同的属性。这不是基本限制;也就是说,通过更多的工作,它可以得到支持;但这是目前的限制。

【讨论】:

以上是关于如何使用 Jackson 处理命名空间重复的 xml 标签的主要内容,如果未能解决你的问题,请参考以下文章

jackson fasterxml 将命名空间添加到根元素

命名空间中的内联函数在 gcc 上的链接期间生成重复的符号

如何从杰克逊 XML 解析中删除命名空间定义

如何使用 Jackson 全局定义命名约定

如何避免在 aspx 页面中重复命名空间

如何获取命名空间中的所有类?