生成方法を制御できない XML があります。私が手作業で書いたクラスにアンマーシャリングして、そこからオブジェクトを作成したいと考えています。
その構造の 1 つのスニペットは次のようになります。
<categories>
<key_0>aaa</key_0>
<key_1>bbb</key_1>
<key_2>ccc</key_2>
</categories>
このような場合はどのように処理すればよいですか?もちろん、の要素数は可変です。
生成方法を制御できない XML があります。私が手作業で書いたクラスにアンマーシャリングして、そこからオブジェクトを作成したいと考えています。
その構造の 1 つのスニペットは次のようになります。
<categories>
<key_0>aaa</key_0>
<key_1>bbb</key_1>
<key_2>ccc</key_2>
</categories>
このような場合はどのように処理すればよいですか?もちろん、の要素数は可変です。
次のオブジェクト モデルを使用すると、マッピングされていない 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) を使用でき、既知の要素が対応するオブジェクトに変換されます。例については、次を参照してください。
この単純な要素では、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
注釈付きで記述します。
お役に立てば幸いです