繁体   English   中英

使用SAXParser读取XML

[英]Reading an XML using SAXParser

我想读取这样的文件:

<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解析,您将需要自己处理上下文。 您发出的问题是,区分低于level2或低于level3a level3节点。 最好的方法是在解码时处理当前所在节点的堆栈:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM