jaxbを使用して次のスキーマでxmlを生成するにはどうすればよいですか。
<NS1:getRatesResponse xmlns:NS1="http://mynamespaceTypes">
<response>
<NS2:rates xmlns:NS2="http://mynamespace">
<currency>USD</currency>
</NS2:rates>
<NS3:rates xmlns:NS3="http://mynamespace">
<currency>EUR</currency>
</NS3:rates>
<NS4:rates xmlns:NS4="http://mynamespace">
... etc
</response>
私は、すべての新しいアイテムが同じ名前空間を持つNS(n + 1)であるべきであることをjaxbに伝える方法を知りません。 XML形式は外部にあるため、変更することはできません。
JAXBはこのxmlを正しく解析しますが、同じクラスを使用して生成する場合、次のように生成します。
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<ns3:getRatesResponse
xmlns:ns2="http://mynamespaceTypes"
xmlns:ns3="http://mynamespace">
<response>
<ns2:rates>
<currency>EUR</currency>
</ns2:rates>
<ns2:rates>
<currency>USD</currency>
</ns2:rates>
</response>
</ns3:getRatesResponse>
回答:
回答№1は4このユースケースでは、次のことを行います。
- StAXを作成する
XMLStreamWriter
- 書きます
getRatesResponse
そしてresponse
要素に直接XMLStreamWriter
- 次のプロパティを設定します
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);
各マーシャルコールでヘッダーが書き込まれないようにします。 - それぞれの元s
Rate
オブジェクトXMLStreamWriter
個別に - マーシャラーでのインスタンスを設定します
NamespacePrefixMapper
その上で名前空間プレフィックスを制御します(これには現在JAXB RIが必要です。この拡張機能のサポートは現在追加されています EclipseLink JAXB(MOXy))。
詳細については