在Android中使用Simple XML解析XML文件列表元素

4

我需要使用Simple XML解析一个大型XML文件(我真的想使用Simple XML)。我使用XSD创建了对象,并将它们从JAXB特定转换为SimpleXML特定的注释对象。

XML文件的格式如下:

    <House>
      <MainLevel Name="~#editRoom" IsHidden="false">
        <ChildLevel Name="Television" Category="Livingroom">
          <string>TestRoom</string>
        </ChildLevel>
         <ChildLevel Name="Chair" Category="Livingroom">
          <string>TestRoom</string>
        </ChildLevel>
         <ChildLevel Name="Table">
          <string>TestRoom</string>
        </ChildLevel>
         <ChildLevel Name="ChamberName" Category="Livingroom">
          <string>TestRoom</string>
        </ChildLevel>
          <ChildLevel Name="ChamberName" Category="Bathroom">
          <string>BathTub</string>
        </ChildLevel>
         <ChildLevel Name="Door", Category="DiningRoom">
          <boolean>isOpen</boolean>
        </ChildLevel>
     </MainLevel>
    <MainLevel Name="~#editRoom" IsHidden="false">
        <ChildLevel Name="Television" Category="Livingroom">
          <string>TestRoom</string>
        </ChildLevel>
         <ChildLevel Name="Chair" Category="Livingroom">
          <string>TestRoom</string>
        </ChildLevel>
         <ChildLevel Name="Table" Category="Livingroom">
          <string>TestRoom</string>
        </ChildLevel>
         <ChildLevel Name="ChamberName" Category="Livingroom">
          <string>TestRoom</string>
        </ChildLevel>
          <ChildLevel Name="ChamberName" Category="Bathroom">
          <string>BathTub</string>
        </ChildLevel>
         <ChildLevel Name="Door">
          <boolean>isOpen</boolean>
        </ChildLevel>
     </MainLevel>
</House>

您有什么建议?请帮忙。谢谢。

可能是同一个问题 xml-parsing - Suzon
1
不,链接的问题是关于Java XML API的,而这个问题是关于Simple Framework(XML序列化/反序列化(Java))的。 - ollo
1个回答

3

您需要编写3个类:

  1. House类(= 根类),包含一个(内联)MainLevel列表
  2. MainLevel类,包含所有ChildLevel的(内联)列表
  3. ChildLevel类,包含值

以下是一些伪代码

@Root(...)
public class House
{
    @ElementList(inline = true, ...)
    private List<MainLevel> levels;

    // ...
}

public class MainLevel
{
    @Attribute(name = "Name")
    private String name;
    @Attribute(name = "IsHidden")
    private bool hidden;
    @ElementList(inline = true, ...)
    private List<ChildLevel> childLevels;

    // ...
}

public class ChildLevel
{
    @Attribute(name = "Name")
    private String name;
    @Attribute(name = "Category", required = false)
    private String category;

    // ...
}

由于ChildLevel可以有不同的类型,因此您需要注意这一点。要么实现所有类型并将它们标记为非必需,要么创建子类。


1
好的。所以如果我碰巧有一些元素或属性只出现在节点结构的某些位置,那么我将不得不注释为不需要,并且应该可以工作。但是,如果我在其中一个子级节点中嵌套了另一个元素,并且嵌套的节点具有内联节点列表,那么是否适用相同的规则?我明天会发布确切的结构以澄清。感谢您的参与,真的很感激。 - greenspand
@ollo - 你能帮我解决一下问题吗?我的问题是,我想创建一个XML文件,在其中针对一些整数值放置一些值。即-每个整数将包含一个值。此外,我将从editText框中获取这些值。因此,当输入数字和值时,它将附加在先前数据的XML文件中。再次,我需要根据给定的int(用户输入)从该xml文件中查找值。如何做到这一点?我要使用map吗?我不知道如何解决它...请帮帮我... - Shaon Hasan
请发布一个新的问题,仅通过评论解决问题很困难。 - ollo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接