首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用SAXParser读取XML

使用SAXParser读取XML
EN

Stack Overflow用户
提问于 2015-03-20 10:12:15
回答 1查看 55关注 0票数 1

我想读一读这样的文件:

代码语言:javascript
复制
<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的地方,我混淆了一些伪代码:

代码语言:javascript
复制
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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-20 10:51:34

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

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29164039

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档