【问题标题】:JAXB marshalling: change element which should declare a namespaceJAXB 编组:更改应声明命名空间的元素
【发布时间】:2014-04-01 11:13:00
【问题描述】:

当使用 JAXB 编组时,我对 哪个元素 命名空间/命名空间前缀将被声明影响吗?

目前,所有命名空间前缀都在根元素中声明,但由于处理我的 XML 的系统的奇怪限制,我需要在子元素中声明它们(这仍然会产生有效的 xml 文档)。

早在 2006 年就向 official jaxb issue tracker and declined by a developer 提出了类似但不相同的请求。我想知道这种情况是否在此期间发生了变化,或者是否存在一些解决方法。

感谢任何帮助。

示例:

JAXB 编组创建以下 XML:

<outer xmlns:ns1="http://mydomain">
  <inner>
     <ns1:data/>
  </inner>
</outer>

虽然我需要类似的东西 (ns1 前缀在根元素中声明):

<outer>
  <inner xmlns:ns1="http://mydomain">
     <ns1:data/>
  </inner>
</outer>

【问题讨论】:

  • 您能发布一个预期的 XML 示例吗?
  • @Priyesh 我已经更新了问题
  • 您可能会发现这很有用。 jaxb.java.net/nonav/2.2.1/docs/vendorProperties.html。检查文档中的方法getPreDeclaredNamespaceUris()
  • 谢谢,但是这种方法对于逆问题很有用:jaxb 1.0,它或多或少地像我需要的那样工作 - 在首先需要它的元素上声明命名空间。然后可以使用此方法在根元素处设置命名空间声明。
  • 如果从方法中返回一个空数组会发生什么?

标签: java xml jaxb marshalling xml-namespaces


【解决方案1】:

JAXB (JSR-222) 不提供控制命名空间声明发生位置的方法。 JAXB 提供者倾向于将命名空间放在根元素上(出于性能原因),但它们不是必需的。

下面是我对类似问题给出的答案的链接,其中XMLStreamWriter 被扩展以控制何时报告命名空间声明。

【讨论】:

  • 虽然我只考虑建议的 XMLStreamWriter 方式作为一种解决方法,但它似乎是解决我的问题的唯一兼容方式 - 谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-24
  • 1970-01-01
  • 1970-01-01
  • 2012-08-16
  • 1970-01-01
相关资源
最近更新 更多