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

标签 java android xml

我通过使用 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/

相关文章:

java - Spring Cloud Gateway + Spring安全资源服务器

java - Android Studio Onbackpressed

android - devicePolicyManager.lockNow() 不适用于摩托罗拉平板电脑

javascript - 在 Javascript 中将 XML 转换为多行字符串

android - 使 EditText 在填充时增长

java - Sonarqube 鱿鱼 :S2095 false positive

java - 是否可以/支持使用 Java 进行 Impala 查询?

android - 出于测试目的,是否有可能在 Google Play 上发布一个我一个人可以访问的应用程序

java - 如何自动检测 Firebase Firestore 集合中的新文档?

java - Spring @Configuration 中的 Spring 原型(prototype) bean 引用