我不知道如何正确地说出这个问题,但我会举一个例子。
假设我想知道标签type
的属性block
我可以
if (localName == "block") {
int type = Integer.parseInt(attributes.getValue("type));
但是我也有不同的文件来描述一个块类型本身,它使用<块> 标签作为基本标签。我必须知道该属性是否来自BOTH(Level / Blocktype)AND块。或者也许如果它在LevelArray和Block下面。
我希望我有任何意义,我不太了解Xml / xmlparsing。
- 如何从嵌套在其他元素中的元素中查找属性?
答案 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解析器是重量级的,并且使用起来更复杂。