3

XML文字列である文字列があり、jaxbで生成されたスキーマファイルであるいくつかのオブジェクトの1つに対応する可能性があります。
事前にどんなオブジェクトかわかりません。

  • この XML 文字列を jaxb xml オブジェクトに変換するにはどうすればよいですか? ある種のアンマーシャリング?
  • 割り当てられているオブジェクトを特定するにはどうすればよいですか?
  • xml 文字列からオブジェクトに変換されたオブジェクトをインスタンス化するにはどうすればよいですか?
4

4 に答える 4

5

次のようなことができます。

フー

@XmlRootElementorアノテーションを介してクラスに関連付けられたルート要素がある限り、@XmlElementDeclアンマーシャリングするクラスのタイプを指定する必要はありません ( http://blog.bdoughan.com/2012/07/jaxb-を参照)。 and-root-elements.html )。

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class Foo {

    private String bar;

    public String getBar() {
        return bar;
    }

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

}

デモ

から非整列化するには、 のインスタンスで をStringラップするだけです。この操作により、XML がドメイン クラスのインスタンスに変換されます。どのクラスを使用するか、またはそのタイプを判別する必要があるかわからない場合。StringStringReaderunmarshalinstanceofgetClass()

import java.io.StringReader;
import javax.xml.bind.*;

public class Demo {

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

        String xml = "<foo><bar>Hello World</bar></foo>";
        StringReader reader = new StringReader(xml);

        Unmarshaller unmarshaller = jc.createUnmarshaller();
        Object result = unmarshaller.unmarshal(reader);

        if(result instanceof Foo) {
            Foo foo = (Foo) result;
            System.out.println(foo.getBar());
        }
    }

}

出力

Hello World
于 2013-03-29T18:44:03.000 に答える
0
Unmarshaller yourunmarshaller = JAXBContext.NewInstance(yourClass).createUnMarshaller();
JAXBElement<YourType> jaxb = (yourunmarshaller).unmarshal(XMLUtils.getStringSource([your object]), [the class of your object].class);
于 2013-03-29T18:04:19.997 に答える
0

XML オブジェクトのスキーマ ファイルがある場合 (JAXB を使用している場合)、XML に対して検証を実行します。

XSD スキーマに対する Java XML 検証

于 2013-03-29T18:15:46.387 に答える