使用SAXParser读取XML

时间:2015-03-20 10:12:16

标签: 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

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

1 个答案:

答案 0 :(得分:1)

使用SAX解析,您需要处理您自己的上下文。您在此处发出的问题是在level3节点低于level2或低于level3a时区分level3节点。最好的方法是在解码时处理堆栈,当前节点是什么:

  • 在startElement
  • 之后推送堆栈上的节点(名称?)
  • 在endElement之后弹出顶部节点(名称?)。

在您的伪代码中,“循环获取标记”实际上是您注册到SAXParser的SAX回调。每次启动它时,您也可以将节点名称推送到堆栈中。然后,在阅读id节点时,您只需阅读顶部堆栈节点的名称即可知道是否需要阅读a3或三元组b3 c3 {{ 1}}当前节点中的属性。