Java SAX 解析器,存储属性

标签 java xml sax

我正在尝试将当前文档位置存储在堆栈中,在 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 时,它给出了错误: Caused by: java.lang.IllegalStateException: 属性只能在startElement()的范围内使用。

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

最佳答案

当您将属性推送到您的自定义对象堆栈时,您正在使用实际的属性对象,根据 documentation是这样说的:

atts - 附加到元素的属性。如果没有属性,则它应该是一个空的 Attributes 对象。 startElement 返回后此对象的值未定义(强调我的)

相反,您应该在 startElement(...) 方法中捕获 Map 中的属性。这样您就可以随时随地使用它们。

关于Java SAX 解析器,存储属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6337166/

相关文章:

java - web.xml 中的 Log4j2.xml 配置。 IllegalArgumentException - uri 不是绝对的

xml - 在纯 ABAP 中针对 XSD 验证 XML

java - 如何在 Web 应用程序中高效地搜索大型 XML 文件?

java - 如何自动重新加载 App Engine 开发服务器?

java - 如何编写允许特殊字符 DOT 的正则表达式?

android - 如何在ViewPager中设置固定背景

java - 使用java中的SAX解析器从XML中获取所有标签和值

java - 迭代 XML 树并从中提取数据的简单方法?

java - 在无限循环中延迟调用方法

java - 在 Java 7 中通过 HTTP 检索 XML