5

私はJAXBが初めてです。XML に入力できます。私の場合、名前空間のプレフィックスが必要です

<set xmlns="www.google.com"
   xmlns:myName="www.google.com">

それ以外の

<set xmlns="www.google.com"
   xmlns:ns2="www.google.com">

package-infoクラスと@XmlType注釈も使用しました。「xmlns:ns2」ではなく「xmlns:MyName」のように、2 番目の名前空間に必要な名前を取得するために変数を追加する必要がありますか?

4

2 に答える 2

3

EclipseLink JAXB (MOXy)を JAXB プロバイダーとして使用している場合、または JAXB RI の最新バージョンを使用している場合は、次の操作を実行できます。

パッケージ情報

@XmlNsアノテーションのxmlnsプロパティでアノテーションを使用し@XmlSchemaて、名前空間のプレフィックスを指定できます。

@XmlSchema(
    namespace="www.google.com",
    elementFormDefault = XmlNsForm.QUALIFIED,
    xmlns={
        @XmlNs(namespaceURI = "www.google.com", prefix = ""),
        @XmlNs(namespaceURI = "www.google.com", prefix = "myName"),
    })
package forum13817126;

import javax.xml.bind.annotation.*;

Java モデル

以下は、この例で使用する単純な Java モデルです。

package forum13817126;

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class Set {

}

デモコード

次のデモ コードは、ドメイン モデルのインスタンスを作成し、それを XML にマーシャリングします。

package forum13817126;

import javax.xml.bind.*;

public class Demo {

    public static void main(String[] args) throws Exception {
        JAXBContext jc = JAXBContext.newInstance(Set.class);

        Set set = new Set();

        Marshaller marshaller = jc.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        marshaller.marshal(set, System.out);
    }

}

出力

以下は、デモ コードを実行した結果の出力です。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<myName:set xmlns="www.google.com" xmlns:myName="www.google.com"/>

詳細については

于 2012-12-11T10:14:07.750 に答える
1

の注釈にxmlnsプロパティを追加する必要があります。その値は、マーシャラーに推奨されるプレフィックス マッピングを提供する注釈の配列です。これらの提案を無視することは技術的に許可されていますが、衝突がない限り、通常は尊重されることがわかりました (2 つの異なるパッケージが異なる URI に対して同じプレフィックスを提案しています)。@XmlSchemapackage-info

于 2012-12-11T10:08:34.007 に答える