有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用SAXParser检查多个标记

我不知道如何正确表达这个问题,但我会举个例子

enter image description here

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

 if (localName == "block") {

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

但是,我也有不同的文件来描述块类型本身,它使用<;块>; 标记作为基本标记。我必须知道该属性是否是(级别/块类型)和块的子级。或者如果它在LevelArray和Block下

我希望我讲得有道理,因为我对Xml/xmlparsing知之甚少

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


共 (2) 个答案

  1. # 1 楼答案

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

  2. # 2 楼答案

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

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

    另一种选择是使用DOM解析器,因为DOM解析器使您能够获取给定元素的子元素列表等。但是,除非您的需求非常复杂,否则我将坚持使用SAX解析器,并按照建议实现一个状态机。相比之下,DOM解析器是重量级的,使用起来更复杂