当前位置: 首页 > 知识库问答 >
问题:

JAXB编组:更改应声明命名空间的元素

咸浩初
2023-03-14

使用JAXB编组时,我是否会影响将声明命名空间/命名空间前缀的元素?

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

在2006年,一位开发人员曾向官方jaxb问题跟踪器提出过一个类似但不完全相同的请求,但拒绝了。我想知道这一情况是否同时发生了变化,或者是否存在一些解决方法。

任何帮助是值得赞赏的。

例子:

JAXB编组创建以下XML:

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

虽然我需要像这样的东西(ns1前缀没有在根元素中声明):

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

共有1个答案

居英资
2023-03-14

JAXB(JSR-222)没有提供控制命名空间声明发生位置的方法。JAXB提供者倾向于将名称空间放在根元素上(出于性能原因),但并不要求它们这样做。

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

  • JAXB 编组 XMPP 节
 类似资料:
  • 我有一个为安全令牌构建的XML。这些包含基于WS-Trust的名称空间,但是当我解组这个XML以创建< code > RequestSecurityTokenResponseCollection 对象时,它用< code>ns1 、< code>ns2 、< code>ns3等名称空间替换了这些名称空间。 是否有一种方法可以在不更改输入XML中的名称空间和名称空间前缀的情况下解组XML? 这是我一

  • 我有几个关于JAXB编组的简单问题。我正在尝试封送包含以下字段的类: 只需使用以下序列化代码: 我得到的输出是: 现在,我面临的问题如下: > 我想要名称空间xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance“出现在根元素中,即TokenRestrictionTemplate中,而不是单个子元素中。如何实现这一点? 我有一些元素,例如带有@Xm

  • 这是我的xml,需要把它转换成Java。我使用了jaxb 并抛出以下异常javax.xml.bind.unmarshalException:意外元素(URI:“http://www.ae.com/event/load”,local:“order”)。需要的元素为<{}LM:order>

  • 我的代码如下: 我怎样才能让它工作?如果我的xml标记有一些相关元素,如上面的“xmlns”,则JAXB解组器会抛出异常。 这是我第一次这么做,所以我对JAXB、解编等都一无所知。我在苦苦挣扎任何帮助都是好的。 编辑StackTrace:

  • 我有困难建立一个有3个类的结构。我不确定包含/转发声明。 下面的代码一直在编译,直到我在inclino.h中添加名称空间和枚举。我从Inclinomeasure.h收到“Inclino尚未声明”。 倾斜度。h 倾斜度 倾角读数.h 结构正确吗?如何访问其他类中的枚举? 提前道谢。 编辑:我修复了名称空间的问题,把它放在一个新的文件,包括由3类。但我似乎误用了include/forward声明。

  • 我需要你在JAXB编组方面的帮助。这是关于命名空间的。我在这个令人惊叹的网站上阅读了不同的博客和很多答案,但我还没有意识到如何解决我的问题。 我需要用一些复杂的(至少对我来说)名称空间生成一个XML。 如您所见,该XML具有 < code > xmlns:xsi = " http://www . w3 . org/2001/XML schema-instance " 和 http://www.sa