使用SAXParser检查多个标签

时间:2011-12-02 18:15:56

标签: java android xml parsing saxparser

我不知道如何正确地说出这个问题,但我会举一个例子。

enter image description here

假设我想知道标签type的属性block我可以

 if (localName == "block") {

    int type = Integer.parseInt(attributes.getValue("type));

但是我也有不同的文件来描述一个块类型本身,它使用<块> 标签作为基本标签。我必须知道该属性是否来自BOTH(Level / Blocktype)AND块。或者也许如果它在LevelArray和Block下面。

我希望我有任何意义,我不太了解Xml / xmlparsing。

- 如何从嵌套在其他元素中的元素中查找属性?

2 个答案:

答案 0 :(得分:0)

你必须随时跟踪状态。例如,您可以使用一个名为inBlockTag的实例变量,该变量最初为false。在startElement方法中,如果localName.equals("block"),则可以将inBlockTag设置为true。然后,当您处理其他元素时,您可以检查该标志的值,以了解您是否在阻止孩子。如果这样做,请不要忘记在endElement方法上将其设置为false(同样,在localName.equals("block")时)。

答案 1 :(得分:0)

如果我理解正确,那么您的问题似乎是您处理type属性的方式实际上取决于实际节点的结构;换句话说,您处理type属性的方式取决于block元素是否具有父级'LevelArray',或者block本身是否是文档根元素。

在这种情况下,我认为你需要围绕SAX回调实现自己的简单状态机。换句话说,有一些变量跟踪SAX解析器遍历XML文件时已经打开和关闭的元素。这将是一件非常简单的事情。

另一种方法是使用DOM解析器,因为DOM解析器使您能够获得给定元素的子列表等。但是,除非您的要求非常复杂,否则我会坚持使用SAX解析器并只执行建议的状态机。相比之下,DOM解析器是重量级的,并且使用起来更复杂。