簡體   English   中英

用動態名稱空間封送JAXB

[英]JAXB marshalling with dynamic namespace

我對JAXB編組有問題。 我有一些從XSD生成的類。 在編組對象時,我需要能夠動態更改名稱空間URI。

我只是使用自己的QName,例如

new JAXBElement<MyType>(new QName(uri, "Doc") ....

而且有效。 但是問題是MyType由其他幾個類組成,我也想為其更改名稱空間(實際上,所有這些元素都使用一個相同的名稱空間,而我只想更改該名稱空間的URI)。 結果XML僅更改了我的“ root”元素(我為其指定了QName的元素)的名稱空間,如下所示

<ns2:Dok>
    <ns1:Elem>a</ns1:Elem>
</ns2:Dok>

ns2是我隨QName提供的新名稱空間,但是ns1仍然是“舊名稱”(如果在生成的類的包信息中編寫)。 我的問題是-如何永久更改命名空間? 如何更改所有元素的名稱空間URI,如何使我的新QName也適用於所有子元素?

您可以在根元素上設置默認名稱空間。 然后根據定義,如果您不為內部(子元素)提供名稱空間,它將繼承父級已聲明的默認名稱空間。 在您的情況下,將ns2聲明為默認名稱空間 然后必須從中刪除ns1名稱空間 您可能還會發現此問題/答案在xml中刪除多余的ns2注釋對您的情況很有用。

暫無
暫無

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

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