gpt4 book ai didi

java - 使用 SimpleXML 反序列化多个对象中的 XML

转载 作者:太空宇宙 更新时间:2023-11-04 15:23:20 33 4
gpt4 key购买 nike

我通过使用 Simple 将多个对象附加到同一个文件,在 Android 中从对象构建了 xml 文件。

<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 初学者。

最佳答案

首先,为了能够反序列化 xml 文件,它需要有一个根节点。不像你的情况那样有多个。

你有:

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

它应该是什么样子:

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

之后,您需要使用像 Simple 这样的框架进行反序列化或XStream 。我会推荐 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。接下来,您将创建一个对应于“listOfBtDevices”节点的 BluetoothDeviceList 类,并输入包含哪些元素和属性以及此类等。

完成后,您可以像这样反序列化您的 xml:

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

添加一些 getter 后,如果您的模型类需要 setter,您可以访问所有反序列化属性,如下所示:

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

Here您可以找到简单和 here 的完整教程一些额外的例子。

关于java - 使用 SimpleXML 反序列化多个对象中的 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20143307/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com