使用SAXParser检查多个标记
我不知道如何正确表达这个问题,但我会举个例子
假设我想知道标记block
的属性type
,我可以
if (localName == "block") {
int type = Integer.parseInt(attributes.getValue("type));
但是,我也有不同的文件来描述块类型本身,它使用<;块>; 标记作为基本标记。我必须知道该属性是否是(级别/块类型)和块的子级。或者如果它在LevelArray和Block下
我希望我讲得有道理,因为我对Xml/xmlparsing知之甚少
-如何从嵌套在其他元素中的元素中查找属性
# 1 楼答案
你必须在前进的过程中跟踪状态。例如,您可以有一个名为
inBlockTag
的实例变量,该变量最初为false。在startElement
方法中,如果localName.equals("block")
,则可以将inBlockTag
设置为true。然后,在处理其他元素时,可以检查该标志的值,以了解您是否在块的子元素中。如果这样做,不要忘记在endElement方法中将其设置回false(同样,当localName.equals("block")
)# 2 楼答案
如果我理解正确,那么您的问题似乎是如何处理
type
属性实际上取决于实际节点的结构;换句话说,如何处理type
属性取决于block
元素是否具有父级“LevelArray”,或者block
本身是否是文档根元素在这种情况下,我认为您需要围绕SAX回调实现自己的简单状态机。换句话说,在SAX解析器遍历XML文件时,有一些变量跟踪哪些元素已经打开和关闭。这将是一件非常简单的事情
另一种选择是使用DOM解析器,因为DOM解析器使您能够获取给定元素的子元素列表等。但是,除非您的需求非常复杂,否则我将坚持使用SAX解析器,并按照建议实现一个状态机。相比之下,DOM解析器是重量级的,使用起来更复杂