【问题标题】:SAX find closing TagSAX 查找结束标记
【发布时间】:2013-03-11 12:50:55
【问题描述】:

是否有任何可行的使用默认处理程序类来查找相应的 XML 标记?比如……

<Object class="my class">
  <Property>
    <Value>1</Value>
  </Property>
</Object>
<Object class="my next class">
  <Property>
    <Value>1</Value>
  </Property>
</Object>

我想使用 startElement() 和 endElement() 方法,但无法从高层次上弄清楚。我能想到的就是使用计数器,想看看是否有人听说过更简单的方法。我想根据它们的启动和关闭时间将这两个 Object 类拆分为 2 个单独的字符串。有什么建议吗?

【问题讨论】:

  • 你用什么库来解析这个 XML?
  • 导入 javax.xml.parsers.SAXParser;

标签: java xml parsing xml-parsing sax


【解决方案1】:

您需要继承默认处理程序类(无论如何,您都需要这样做才能在startElementendElement 期间进行任何处理)。当startElementObject 标记调用时,创建一个对象并将对它的引用存储在处理程序的实例变量中。当调用endElement 时,将对象保存在某处并将引用设置为null。同时,当您收到其他startElementendElement 事件(对于PropertyValue 标签)时,对引用的对象进行操作。

对第二个对象重复。最后,您将保存对象的两个不同实例。

【讨论】:

  • 如果我有 你的方法还能用吗?
  • @EricCallan - 如果您嵌套了Object 标签,所述方法将不起作用。然而,只要稍作改动——使用一堆引用——基本思想就可以工作。当您收到对象的startElement 事件并且已经存在对象引用时,请在创建新对象之前将现有引用推送到堆栈中。在endElement 事件上,仅当堆栈为空时才设置对null 的引用;否则将其设置为弹出时从堆栈中取出的内容。
猜你喜欢
  • 2014-08-07
  • 1970-01-01
  • 1970-01-01
  • 2018-06-02
  • 2023-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多