我的 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/