加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java SAX Parser,存储属性

发布时间:2020-12-15 08:41:13 所属栏目:Java 来源:网络整理
导读:我正在尝试将当前文档位置存储在堆栈中,推送startElement,在endElement上弹出.现在我正在使用: public void startElement(String namespaceURI,String elname,String qName,Attributes atts) throws SAXException { original.append(innerText); original.a
我正在尝试将当前文档位置存储在堆栈中,推送startElement,在endElement上弹出.现在我正在使用:

public void startElement(String namespaceURI,String elname,String qName,Attributes atts) throws SAXException {
    original.append(innerText);
    original.append("<");
    original.append(elname);
    original.append(">");
    docStack.push(new StackElement(elname,atts));
....

不幸的是,当它试图稍后读取atts时,它会给出错误:
引起:java.lang.IllegalStateException:属性只能在startElement()的范围内使用.

有没有快速,可靠的方法来存储属性?
另外,有没有比为每个开始标记构建新的自定义对象StackElement更好的方法呢?

解决方法

当您将属性推送到自定义对象堆栈时,您将获取实际的Attributes对象,根据 documentation的说法:

atts – 附加到元素的属性.如果没有属性,则它应为空的Attributes对象. startElement返回后该对象的值未定义(强调我的)

您应该在startElement(…)方法中捕获Map< String,String>中的属性.这样您就可以在任何地方使用它们.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读