5

生成方法を制御できない XML があります。私が手作業で書いたクラスにアンマーシャリングして、そこからオブジェクトを作成したいと考えています。

その構造の 1 つのスニペットは次のようになります。

<categories>
    <key_0>aaa</key_0>
    <key_1>bbb</key_1>
    <key_2>ccc</key_2>
</categories>

このような場合はどのように処理すればよいですか?もちろん、の要素数は可変です。

4

3 に答える 3

7

次のオブジェクト モデルを使用すると、マッピングされていない key_# 要素のそれぞれが org.w3c.dom.Element のインスタンスとして保持されます。

import java.util.List;
import javax.xml.bind.annotation.XmlAnyElement;
import javax.xml.bind.annotation.XmlRootElement;
import org.w3c.dom.Element;

@XmlRootElement
public class Categories {

    private List<Element> keys;

    @XmlAnyElement
    public List<Element> getKeys() {
        return keys;
    }

    public void setKeys(List<Element> keys) {
        this.keys = keys;
    }

}

要素のいずれかが @XmlRootElement アノテーションでマップされたクラスに対応する場合、 @XmlAnyElement(lax=true) を使用でき、既知の要素が対応するオブジェクトに変換されます。例については、次を参照してください。

于 2010-11-25T18:41:13.207 に答える
-1

この単純な要素では、Categories というクラスを作成します。

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class Categories {

    protected String key_0;
    protected String key_1;
    protected String key_2;

    public String getKey_0() {
        return key_0;
    }

    public void setKey_0(String key_0) {
        this.key_0 = key_0;
    }

    public String getKey_1() {
        return key_1;
    }

    public void setKey_1(String key_1) {
        this.key_1 = key_1;
    }

    public String getKey_2() {
        return key_2;
    }

    public void setKey_2(String key_2) {
        this.key_2 = key_2;
    }

}

次に、メイン メソッドかそこらで、アンマーシャラーを作成します。

JAXBContext context = JAXBContext.newInstance(Categories.class);
Unmarshaller um = context.createUnmarshaller();
Categories response = (Categories) um.unmarshal(new FileReader("my.xml"));
// access the Categories object "response"

すべてのオブジェクトを取得できるようにするには、ルート要素内のすべての要素を新しい xml ファイルに配置し、このルート要素のクラスを@XmlRootElement注釈付きで記述します。

お役に立てば幸いです

于 2010-11-25T15:53:59.273 に答える