簡體   English   中英

如何使用JAXB將多個名稱空間編組為XML根元素

[英]How to marshal multiple namespaces to XML root element with JAXB

我想讓JAXB編組到xml,其中名稱空間僅出現在根元素中,而不出現在其他任何元素中:

<myroot xmlns="http://www.mysite.com" xmlns:a="http://www.mysite.com/a" xmlns:ab="http://www.mysite.com/ab" xmlns:y="http://www.mysite.com/y">
...
</myroot>

我已經嘗試了包級別@XmlSchema,但是我必須做錯了什么,因為什么都沒有出現。

這是我的根元素類:

@XmlRootElement(name="myroot")
@XmlAccessorType(XmlAccessType.FIELD)
public class RootElementClass
{
....
}

我也有以下package-info.java:

@XmlSchema
(
    namespace="http://www.mysite.com", 
    elementFormDefault=XmlNsForm.QUALIFIED,
    xmlns=
    {
            @XmlNs(namespaceURI = "http://www.mysite.com",    prefix = ""),
            @XmlNs(namespaceURI = "http://www.mysite.com/a",  prefix = "a"),
            @XmlNs(namespaceURI = "http://www.mysite.com/ab", prefix = "ab"),
            @XmlNs(namespaceURI = "http://www.mysite.com/y",  prefix = "y")
    }
)
package com.seastreetinc.rd.nso.jaxb;
import javax.xml.bind.annotation.XmlNs;
import javax.xml.bind.annotation.XmlNsForm;
import javax.xml.bind.annotation.XmlSchema;

JAXB規范說(不說)的內容

JAXB(JSR-222)規范不涵蓋名稱空間聲明出現的位置或前綴的名稱(請參閱: http : //blog.bdoughan.com/2011/11/jaxb-and-namespace-prefixes.html )。

JAXB實現的作用

實現所使用的一般策略是找出模型使用的最小名稱空間,並在根元素上聲明它們。 這可能是您在@XmlSchema批注中聲明的內容的子集。


更新

NamespacePrefixMapper擴展可用於控制根元素上的名稱空間。 有關完整示例,請參見下面鏈接的答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM