Java SAX 在 XML 文件中搜索数据

标签 java xml persistence sax jaxp

我的 Java 项目中的一个包内有 .xml 文件,其中包含以下格式的数据...

<?xml version="1.0"?>
<postcodes>
    <entry postcode='AB1 0AA' latitude='7.101478' longitude='2.242852' />
</postcodes>

我目前已将自定义 DefaultHandler 中的 startElement() 覆盖为以下内容;

public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
    if (attributes.getValue("postcode") == "AB43 8TZ"){
        System.out.println("The postcode 'AB43 8TZ', has a latitude of "+attributes.getValue("latitude")+" and a longitude of "+attributes.getValue("longitude"));
    }
}

我知道代码在此方法之外工作,因为我之前通过打印出每个元素的所有属性来测试它并且工作正常。然而现在,它什么也不做,就好像它从未找到那个邮政编码值一样。 (我知道它在那里,因为它是来自 XML 源的复制粘贴作业)

额外的细节;为最初遗漏重要细节而道歉。其中一些文件有多达 50k 行,因此如果可能的话,将它们存储在内存中是不行的。因此,我正在使用 SAX。另一方面,我使用了“来 self 项目中的这些文件”这个词,因为我也找不到如何从同一项目中而不是从绝对目录中引用文件。 p>

最佳答案

(来自 OP 要求的评论。)

首先,您不能使用 == 运算符比较字符串。请改用 equals()。见问题How do I compare strings in Java?获取更多信息。

其次,并非每个元素都有 postcode 属性,因此您可能会在 null 对象上调用 equals(),从而导致 NullPointerException 。反过来做,例如

"AB43 8TZ".equals(attributes.getValue("postcode"))

关于Java SAX 在 XML 文件中搜索数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18535499/

相关文章:

java |属性的可变值

Python 在 BeautifulSoup 中解析时跳过 XML 子节点

java - 使用 Saxon 进行转换时处理 XML 中的特殊字符

cocoa - 在 Cocoa 中存储下载的文件

kubernetes - 安装 k8 永久卷静默失败

java - 使用 element.click() 时出现 WebDriverException 'unknown error: no element reference returned by script'

java - 找不到谷歌包 "com.google.cloud.speech.v1beta1"

xml - 在 Subversion 中对 docx 文件进行版本控制

TensorFlow Keras SavedModel 在保存和加载两次后抛出 TypeError

java - 是否有任何不是特定于 IDE 的 Java swing GUI 应用程序构建工具?