1

クラスに「abc」という属性があります。この属性を XML 文字列形式に変換するように制限したいと考えています。
これが XML 文字列に変換されるのを避けるために、属性で使用できる XML 注釈はありますか?

誰かがこれについて私を助けてください。

4

4 に答える 4

3

XML を処理するためにJAXB (JSR-222)実装を使用しているときにプロパティを除外する場合、いくつかのオプションがあります。

オプション1 -@XmlTransient

フィールド/プロパティを除外する最も一般的な方法は、 で注釈を付けること@XmlTransientです。

import javax.xml.bind.annotation.*;

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Root {

    @XmlTransient
    private String foo;

    private String bar;

    public void setFoo(String foo) {
        this.foo = foo;
    }

    public void setBar(String bar) {
        this.bar = bar;
    }

}

オプション #2 -@XmlAccessorType(XmlAccessType.NONE)

プロパティの半分以上を除外したい場合は@XmlAccessorType(XmlAccessType.NONE)、クラスに設定することをお勧めします。次に、注釈付きのフィールド/プロパティのみがマップされます。以下の例では、foo を除外する必要はありませんが、bar を明確に含める必要があります。

import javax.xml.bind.annotation.*;

@XmlRootElement
@XmlAccessorType(XmlAccessType.NONE)
public class Root {

    private String foo;

    @XmlElement
    private String bar;

    public void setFoo(String foo) {
        this.foo = foo;
    }

    public void setBar(String bar) {
        this.bar = bar;
    }

}

オプション #3 - 一時的な

フィールド アクセスを使用している場合は、フィールドを一時的なものとしてマークして除外することもできます。

import javax.xml.bind.annotation.*;

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Root {

    private transient String foo;

    private String bar;

    public void setFoo(String foo) {
        this.foo = foo;
    }

    public void setBar(String bar) {
        this.bar = bar;
    }

}

デモ

次のデモ コードは、どのオプションを選択しても使用できます。

import javax.xml.bind.*;

public class Demo {

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

        Root root = new Root();
        root.setFoo("FOO");
        root.setBar("BAR");

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

}

出力

出力では、foo要素が出力から除外されていることがわかります。

<?xml version="1.0" encoding="UTF-8"?>
<root>
   <bar>BAR</bar>
</root>

詳細については

于 2013-07-23T10:01:02.927 に答える
1

@XMLTransientをお探しですか?

于 2013-07-22T15:31:35.763 に答える