我正在开发一个 Java 应用程序,它使用 JAXB 将 Java 对象编组到 XML 中。目前,生成的 XML 如下所示:
<A xmlns="A" xmlns:ns2="B" xmlns:ns3="C">
<t1>content</t1>
<t2>
<ns2:t3>
<ns2:t4>content2</ns2:t4>
</ns2:t3>
</t2>
</A>
命名空间定义放置在根标签“A”中。而且,某些命名空间(例如“C”)甚至没有被使用。我想将命名空间定义放置在内部子级中代替前缀。例如,我想获取以下xml:
<A xmlns="A">
<t1>content</t1>
<t2 xmlns:ns2="B">
<t3>
<t4>content2</t4>
</t3>
</t2>
</A>
这两个 xml 都是有效的,但我需要生成第二个输出才能通过第三方应用程序的验证。
我怎样才能实现这个目标?
谢谢你。
请注意,
xmlns:name="..."
仅将命名空间与前缀相关联。具有此前缀的任何元素都将属于关联的命名空间。没有前缀的元素属于默认命名空间。
因此...
除此之外,将命名空间声明放在哪里并不重要,只要在需要时声明它们即可。
<A xmlns="A" xmlns:ns2="B">
<t1>content</t1>
<t2>
<ns2:t3>
<ns2:t4>content2</ns2:t4>
</ns2:t3>
</t2>
</A>
相当于
<A xmlns="A">
<t1>content</t1>
<t2>
<ns2:t3 xmlns:ns2="B">
<ns2:t4>content2</ns2:t4>
</ns2:t3>
</t2>
</A>
使用 JAXB 时,您必须使用 XmlElement 注释定义命名空间:
@XmlElement(name = "t3", namespace = "B")
protected T3 t3;
对应属于此命名空间的任何其他元素重复此操作。