JAXB 编组:更改应声明命名空间的元素
Posted
技术标签:
【中文标题】JAXB 编组:更改应声明命名空间的元素【英文标题】:JAXB marshalling: change element which should declare a namespace 【发布时间】: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,它或多或少地像我需要的那样工作 - 在首先需要它的元素上声明命名空间。然后可以使用此方法在根元素处设置命名空间声明。
如果从方法中返回一个空数组会发生什么?
【参考方案1】:
JAXB (JSR-222) 不提供控制命名空间声明发生位置的方法。 JAXB 提供者倾向于将命名空间放在根元素上(出于性能原因),但它们不是必需的。
下面是我对类似问题给出的答案的链接,其中XMLStreamWriter
被扩展以控制何时报告命名空间声明。
【讨论】:
虽然我只考虑建议的 XMLStreamWriter 方式作为一种解决方法,但它似乎是解决我的问题的唯一兼容方式 - 谢谢。以上是关于JAXB 编组:更改应声明命名空间的元素的主要内容,如果未能解决你的问题,请参考以下文章