2016-08-15 5 views
1

XML文書を部分的にJavaクラス(ある深さまで)に非整列化し、残りをノードまたは要素として残す方法XML文字列またはドキュメント)であり、アンマーシャリングされた部分からアクセス可能です。JAXB XMLをクラスにクラス分けし、要素またはノードとして残りの部分を残す

など。私は、XMLを持っている:

<customer> 
    <name>Mike</name> 
    <items> 
    <item>Car</item> 
    <item>Boat</item> 
    </items> 
</customer> 

とJavaクラス:

@XmlRootElement 
public class Customer { 

    @XmlElement 
    private String name; 

    // something like this: 
    private Node items; 
    // or like this: 
    // private String items; 
} 

理由は、私がitems部分に興味がないので、私が解析することはありませんか、それはJavaでアクセスしています。 しかし、私はそれを保存して後でそれを取得し、完全なXML文書を生成できる必要があります。一方、name要素はJavaコードで使用します。

itemsの部分(少なくともサブ要素)のスキーマは、Javaクラスを変更することなく変更できます。

答えて

0

@XmlAnyElement(lax=true)を使用してこの使用例を処理できます。このアノテーションを使用すると、任意のXMLをJavaオブジェクト(DOMノード)にアンマーシャリングできます。

@XmlRootElement(name = "customer") 
public class Customer { 

    @XmlElement 
    private String name; 
    @XmlAnyElement(lax=true) 
    private Object items;  
} 

マーシャラーが正しく

JAXBContext jaxbContext = JAXBContext.newInstance(Customer.class); 
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller(); 
Customer customer = (Customer) jaxbUnmarshaller.unmarshal(reader); 

Marshaller marshaller = jaxbContext.createMarshaller(); 
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 
marshaller.marshal(customer, System.out); 
+0

感謝をXMLノードを書きます!私はその機能を見ていきます。 xjb(xjcバインディング)を使ってその注釈を自動的に生成されたクラスに入れることができるかどうか知っていますか? – jhyot

+0

この投稿を見るhttp://stackoverflow.com/questions/9293634/jaxb-2-1-customize-xsany-bindingデフォルトのオプションがスキーマに適していない場合、Jaxbのドキュメントと追加のプラグインへのリンクがあります – pedrofb

関連する問題