如何从杰克逊 XML 解析中删除命名空间定义
Posted
技术标签:
【中文标题】如何从杰克逊 XML 解析中删除命名空间定义【英文标题】:How to remove namespace definition from jackson Xml parsing 【发布时间】:2015-05-23 18:26:52 【问题描述】:我正在使用 Jackson 数据格式将 Pojos 序列化为 XML。
它工作正常,但我想删除命名空间定义:
@JacksonXmlRootElement(localName="simple_something")
public class Simple
public int x = 1;
public int y = 2;
我愿意:
ObjectMapper xmlMapper = new XmlMapper();
String xml = xmlMapper.writeValueAsString(new Simple());
我明白了:
<simple_something xmlns="">
<x>1</x>
<y>2</y>
</simple_something>
但我想删除 xmlns=""
它看起来像
<simple_something>
<x>1</x>
<y>2</y>
</simple_something>
有什么想法吗?
【问题讨论】:
【参考方案1】:确保使用Woodstox
Stax 实现,而不是 Stax 实现 Oracle 与 JDK 捆绑。这通常通过添加 Maven 依赖项以显式包含 woodstox jar 来完成。
这在https://github.com/FasterXML/jackson-dataformat-xml/的 XML 模块自述文件中进行了解释
Oracle 的实现出于某种原因在命名空间修复模式中添加了该声明。它也更慢并且有更多的错误,所以没有太多理由依赖它,除非你真的想最小化外部依赖。
还要注意,命名空间声明是完全无害的,因此虽然没有必要,但它是合法的 XML。因此,虽然看起来很碍眼,但所有 xml 工具都应该可以与这些额外的声明一起正常工作。
【讨论】:
我已经添加了woodstock pom依赖,它仍然保持一个空的xmlns属性。 我也做了同样的事情,但也没有用。我还使用 WstxInputFactory 和 WstxOutputFactory 初始化了我的 XmlMapper,如 GitHub 页面所示。 如果这是最新的(2.9.10 或 2.10.0),woodstox 作为依赖项,可能有意义地提出问题的重现(理想情况下是单元测试)问题。虽然没有害处,但不应编写该命名空间声明。以上是关于如何从杰克逊 XML 解析中删除命名空间定义的主要内容,如果未能解决你的问题,请参考以下文章
如何从 WEB API 请求和响应 XML 中删除命名空间?