2013-11-22 43 views
1

多個對象我建立XML文件中的Android從對象通過使用Simple反序列化XML中使用SimpleXML

<listOfBtDevices> 
    <devices class="java.util.ArrayList"> 
    <BTDevice> 
    <address>00:27:13:A3:2D:14</address> 
    <bondState>NONE</bondState> 
    <deviceType>LAPTOP</deviceType> 
    <name>LTPH</name> 
    <services>AUDIO CAPTURE NETWORKING OBJECT_TRANSFER RENDERING TELEPHONY</services> 
    <rssi>-95</rssi> 
    </BTDevice> 
    <BTDevice> 
    <address>00:27:13:A3:2D:14</address> 
    <bondState>NONE</bondState> 
    <deviceType>LAPTOP</deviceType> 
    <name>LTPH</name> 
    <services>AUDIO CAPTURE NETWORKING OBJECT_TRANSFER RENDERING TELEPHONY</services> 
    <rssi>-95</rssi> 
    </BTDevice> 
    <BTDevice> 
    <address>00:27:13:A3:2D:14</address> 
    <bondState>NONE</bondState> 
    <deviceType>LAPTOP</deviceType> 
    <name>LTPH</name> 
    <services>AUDIO CAPTURE NETWORKING OBJECT_TRANSFER RENDERING TELEPHONY</services> 
    <rssi>-95</rssi> 
    </BTDevice> 
</devices> 
<timestamp>22.11.2013_10.56.44</timestamp> 
</listOfBtDevices> 
<listOfBtDevices> 
<devices class="java.util.ArrayList"> 
    <BTDevice> 
    <address>00:27:13:A3:2D:14</address> 
    <bondState>NONE</bondState> 
    <deviceType>LAPTOP</deviceType> 
    <name>LTPH</name> 
    <services>AUDIO CAPTURE NETWORKING OBJECT_TRANSFER RENDERING TELEPHONY</services> 
    <rssi>-95</rssi> 
    </BTDevice> 
    </devices> 
    <timestamp>22.11.2013_10.56.50</timestamp> 
</listOfBtDevices> 

在上面的例子中的對象是ListOfBtDevices其是化合物追加多個對象到相同的文件(字符串)時間戳和BTDevice的ArrayList。問題是如何在桌面計算機上使用Simple或其他框架在多個ListOfBtDevice對象中反序列化它?

謝謝你,對不起,如果我犯了錯誤,但我是初學者在JAVA。

回答

0

首先,爲了能夠反序列化xml文件,它需要有一個單一的根節點。不像你的情況那樣多。

您有:

<listOfBtDevices> 
... 
</listOfBtDevices> 
<listOfBtDevices> 
... 
</listOfBtDevices> 

它應該是什麼樣子:

<root> 
    <listOfBtDevices> 
    ... 
    </listOfBtDevices> 
    <listOfBtDevices> 
    ... 
    </listOfBtDevices> 
</root> 

之後,你需要使用一些框架像SimpleXStream反序列化。我會推薦Simple用於你的目的,我會給你一個使用Simple的簡單例子:

要使用Simple將XML反序列化爲對象,必須創建具有與xml相同結構的模型類。您將描述如何使用註釋(如@Element或@Attribute)將對象映射到XML。在你的情況下,它會是這個樣子:

首先,你需要對應於您的根節點類:

// The name you enter here is how the root node is called in your xml 
@Root(name = "root") 
public class BluetoothDeviceListContainer { 

    // It contains a List, inline is set to true because the list items are directly inside the root node, each entry is called "listOfBtDevices" 
    @ElementList(entry = "listOfBtDevices", inline = true) 
    List<BluetoothDeviceList> bluetoothDeviceList; 

} 

你繼續這樣做,直到你已經完全與課程描述你的XML。接下來,您將創建一個類BluetoothDeviceList對應於「listOfBtDevices」節點,進入哪些元素和屬性都包含這個類等

當你完成,你可以反序列化這樣的XML:

Serializer serializer = new Persister(); 
BluetoothDeviceListContainer container = serializer.read(BluetoothDeviceListContainer.class, xmlAsString); 

加入一些干將後,如果您需要制定者你的模型類,您可以訪問所有的反序列化的屬性是這樣的:

BluetoothDeviceList list = container.get(0); 
... 

Here你可以找到簡單和一個完整的教程一些額外的例子。

+0

謝謝!這真的很有幫助。 – user2866931

+0

我的回答出錯了,我糾正了!希望我能幫助你。 –

+0

@Xaver Kapeller:你可以幫我解決這個問題:http://stackoverflow.com/questions/22553473/how-am-i-going-to-create-a-xml-file-using-pullparser-for-hashmap ?noredirect = 1#comment34326091_22553473 –