这是我在StackOverflow上的第一个问题,所以请耐心等待。
我在编组XML时遇到问题,该问题使用不同命名空间的默认前缀。使用默认前缀的每个元素都应在其开始标记中指定其名称空间。我想要实现的一个例子就是这样(简化):
<parent xmlns="parentNamespace" xmlns:cd1="child1Namespace">
<cd1:child1/>
<child2 xmlns="child2Namespace">
...
</child2>
<child3 xmlns="child3Namespace">
...
</child3>
</parent>
我尝试使用这样的注释在我试图编组的对象的package-info.java
中设置名称空间前缀:
@javax.xml.bind.annotation.XmlSchema(
namespace = "parentNamespace",
elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED,
xmlns = {
@XmlNs(prefix="",parentNamespace"),
@XmlNs(prefix="cd1", namespaceURI="child1Namespace"),
@XmlNs(prefix="", namespaceURI="child2Namespace"),
@XmlNs(prefix="", namespaceURI="child3Namespace")
}
)
但最终结果是这样的:
<ns1:parent xmlns:ns1="parentNamespace" xmlns:cd1="child1Namespace" xmlns="child2Namespace xmlns:ns2="child3Namespace"<
<cd1:child1/>
<child2>
...
</child2>
<ns2:child3>
...
</ns2:child3>
</ns1:parent>
这确实是一个有效的XML,但不幸的是,由于我无法控制的原因还不够好(不通过验证)。另请注意,使用Java 8的解决方案是非常可取的,因为如果可能的话,我不想弄乱NamespacePrefixMapper
(如果它甚至可以工作)。
所以问题是:是否可以使用JAXB生成XML,该JAXB对多个名称空间使用相同的前缀以及如何使用?