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

Cec*_*nas 5 xml jackson

我正在使用Jackson数据格式将Pojos序列化为XML。

它工作正常,但我想删除名称空间定义:

@JacksonXmlRootElement(localName="simple_something")
public class Simple {
public int x = 1;
public int y = 2;
Run Code Online (Sandbox Code Playgroud)

}

我做:

ObjectMapper xmlMapper = new XmlMapper();
String xml = xmlMapper.writeValueAsString(new Simple());
Run Code Online (Sandbox Code Playgroud)

我得到:

<simple_something xmlns="">
  <x>1</x>
  <y>2</y>
</simple_something>
Run Code Online (Sandbox Code Playgroud)

但我想删除xmlns =“”

看起来像

<simple_something>
  <x>1</x>
  <y>2</y>
</simple_something>
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

Sta*_*Man 2

确保使用WoodstoxStax 实现,而不是 Stax 实现 Oracle 与 JDK 捆绑包。这通常是通过添加 Maven 依赖项以显式包含 woodstox jar 来完成的。XML 模块自述文件对此进行了解释,网址为https://github.com/FasterXML/jackson-dataformat-xml/

由于某种原因,Oracle 的实现在名称空间修复模式中添加了该声明。它也更慢并且有更多错误,所以没有太多理由依赖它,除非你真的想最小化外部依赖。

另请注意,该名称空间声明是完全良性的,因此虽然不必要,但它是合法的 XML。因此,虽然它很碍眼,但所有 xml 工具都应该可以在此类额外声明的情况下正常工作。

  • 我添加了 woodstock pom 依赖项,它仍然保留一个空的 xmlns 属性。 (6认同)