如何从 jackson Xml 解析中删除名称空间定义
How to remove namespace definition from jackson Xml parsing
我使用 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>
有什么想法吗?
确保使用 Woodstox
Stax 实现,而不是 Oracle 与 JDK 捆绑的 Stax 实现。这通常是通过添加 Maven 依赖项以显式包含 woodstox jar 来完成的。
在 https://github.com/FasterXML/jackson-dataformat-xml/
的 XML 模块自述文件中对此进行了解释
Oracle 的实现出于某种原因在名称空间修复模式中添加了该声明。它也更慢并且有更多错误,所以没有太多理由依赖它,除非你真的想最小化外部依赖性。
另请注意,命名空间声明是完全无害的,因此虽然不必要,但它是合法的 XML。因此,虽然它很碍眼,但所有 xml 工具都应该可以很好地处理这些额外的声明。
我使用 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>
有什么想法吗?
确保使用 Woodstox
Stax 实现,而不是 Oracle 与 JDK 捆绑的 Stax 实现。这通常是通过添加 Maven 依赖项以显式包含 woodstox jar 来完成的。
在 https://github.com/FasterXML/jackson-dataformat-xml/
Oracle 的实现出于某种原因在名称空间修复模式中添加了该声明。它也更慢并且有更多错误,所以没有太多理由依赖它,除非你真的想最小化外部依赖性。
另请注意,命名空间声明是完全无害的,因此虽然不必要,但它是合法的 XML。因此,虽然它很碍眼,但所有 xml 工具都应该可以很好地处理这些额外的声明。