java - 使用 SAXParser 读取 XML

标签 java sax

我想读取这样一个文件:

<level1 a="1" b="2" c="3">
  <level2 a2="1" b2="2" c2="3">
    <level3 a3="1" b3="2" c3="3">
       <level4 a4="1" b4="2" c4="3">
    </level3>
  </level2>
  <level2a a2a="1" b2a="2" c2a="3">
    <level3a>
      <level3 id="0"/>
      <level3 id="2"/>
      <level3 id="7"/>
      <level3 id="11"/>
    </level3a>
  </level2a>
</level1>    

注意: level3 实际上在不同的上下文中使用了两次

我混合了一些伪代码,我希望在 Java 中使用 SAXParser:

create new parser
loop to get tags
if tag is level 1
get its properties(a b and c)
save the values of them into level1_a,level1_b,level1_c
if tag is level 2
...
if ..
...
end loop
done

但是我从来没有使用过它,我不清楚它是如何工作的,你能帮助我吗?

最佳答案

使用 SAX 解析,您将需要处理您这边的上下文。这里的问题是区分 level3 节点低于 level2 或低于 level3a 的情况。最好的方法是在解码时处理堆栈,您当前所在的节点是什么:

  • 在 startElement 之后将节点(名称?)压入堆栈
  • 在 endElement 之后弹出顶部节点(名称?)。

在您的伪代码中,您的“循环获取标签”实际上是您注册到 SAXParser 的 SAX 回调。每次启动时,您还可以将节点名称压入堆栈。然后在读取level3节点时,只需读取栈顶节点的名称即可知道是否需要读取当前节点中的id或三元组a3b3c3属性。

关于java - 使用 SAXParser 读取 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29164039/

相关文章:

java - 使用 SAXParser 解析 xml 时出现意外行为

java - Grails 1.3.7 执行脚本时出错 War : Provider for javax. xml.parsers.SAXParserFactory 找不到

java - 我应该如何将系统属性选项传递给我的 jar 文件?

Android SAX 解析器没有从标签之间获取全文

java - 如何导入外部 gradle 脚本文件并在 Gradle 中正确导入插件?

java - Spring CSRF token 生命周期

java - 在运行时排除 Spring 配置文件的故障

java - 如何使用Java按列单元格值对Excel表格进行排序?

java - SAXParser '&' 串联问题

java - Android TodoApp 与 ListView - 列表不显示