2011-07-27 7 views
3

XMLファイルの解析にSimple XML Frameworkを使用しています。このように見えるか、サーバーから単純なXMLフレームワークでの継承

私はXML-ファイルを受信します。

<Objects> 
    <Object type="A"> 
     <name></name> 
     <color></color> 
    </Object> 
    <Object type="B"> 
     <shape></shape> 
     <weight></weight> 
    </Object> 
<Objects> 

私はインターフェイス(またはスーパークラス)を持っているオブジェクトと2つのサブクラスB

このXML文書を直列化解除することは可能ですか?

私はクラス -attributeとサブクラスを区別する可能性があるとTutorialで見たが、残念ながらこれは私のために不可能です。フレームワークが型属性の基底に適切なサブクラスを選択することを選択する方法はありますか?

私は、Androidを使用するので、私はあなたのXMLへの1つのマイナーな変更を加えることを喜んでいる場合

答えて

1

シンプルなXMLがあまりにもそれを行うことができます。..(JAXBのような)別のフレームワークを使用することはできません。だからあなたの例では、あなたはこのようになり、そのXMLを変更することができます:

<Objects> 
    <A> 
     <name></name> 
     <color></color> 
    </A> 
    <B> 
     <shape></shape> 
     <weight></weight> 
    </B> 
<Objects> 

をそして、あなたは、次のjavaを持つことができます:

@ElementListUnion({ 
    @ElementList(entry = "A", inline = true, type = A.class), 
    @ElementList(entry = "B", inline = true, type = B.class) 
} 
private List<BaseClass> objects; 

そして、それは実際にそれに存在することがすべてです。私はそれが属性に基づいて行われるとは思っていませんが。私は間違っている可能性があります、その場合はread the docsにしたいかもしれません。

<Objects> 
    <Object class="ObjectA"> 
    <name></name> 
    <color></color> 
    </Object> 
    <Object class="ObjectB"> 
    <shape></shape> 
    <weight></weight> 
    </Object> 
<Objects> 

なぜにそれを供給する前に、正規表現を使用して、クラスを使用してtype="A"type="B"属性を置き換える:あなたがそうのように、クラス属性を使用できない場合

0

これは何をするトリッキーになるだろうシンプルなXMLデシリアライザ?例えば:

xml = xml.replaceAll("type=\"([A-Za-z0-9_]+)\", "class=\"$1\""); 

私は、この一つとして、多型リスト内の特定のクラス型を示すために、属性xsi:typeを使用する.NETのXMLシリアライザ、によって生成されたこのトリック解析XMLを使用することができました。