java - SAXParser:仅处理特定的父子级

标签 java android saxparser

我有 xml 结构

<data>
   <id>id</id>
   <title>dataTitle</title>
   <entry>
      <title>title1</title>
   </entry>
   <entry>
      <title>title2</title>
   </entry>
</data>

我想解析它并仅将标题元素保存在条目下的列表中。如何在 endElement 中检查标题是否在条目下? 不是我有 NullPointerExpception 因为解析器尝试保存作为数据子项的标题。

@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
    elementOn = true;
    if ("entry".equals(localName)) {
        song = new Song();
    }
}


@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
    elementOn = false;

    if ("title".equalsIgnoreCase(localName)) {
        song.setTitle(elementValue);
    } else if ("entry".equalsIgnoreCase(localName)) {
        songList.add(song);
    }
}

最佳答案

在这种情况下,您可以使用堆栈分别在 startElement 和 endElement 事件中插入弹出 cData。在 endElement 事件中添加检查,以便仅存储您需要的数据

关于java - SAXParser:仅处理特定的父子级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16543594/

相关文章:

java - Java 中的 Jackson JSON 序列化 - 将 k/v 对写入根而不是嵌套在属性名称中

java - 从另一个类更改 JLabel 文本不起作用

java - SAXParser 在遇到无效字符时不会抛出异常

java - 用什么? MVC、MVP 或 MVVM 还是……?

java - 以原子方式移动和重命名 Path 实例

关于覆盖资源的 Android 库

android - 使用 GDAA(适用于 Android 的 Google Drive Api)创建/编辑/检索 DB 文件

java - 如何避免 firebase 实时数据库中的重复数据

java - docx4j - 从 xml 文件加载部分

java - Android 内存不足错误