【发布时间】:2012-01-30 14:43:06
【问题描述】:
我正在创建一个 Android 应用程序,该应用程序应该使用 SAX (javax.xml.parsers.SAXParser) 来解析包含不同位置信息的 XML 文件,以便这些位置可以在地图上显示为点;不幸的是,我的解析器有问题。
XML 文件由 1000 多个重复组组成,如下所示:
<Placemark id="00001">
<name>Place name</name>
<address>Place address</address>
<ExtendedData>
<Data name="postcode">
<value>Place postcode</value>
</Data>
</ExtendedData>
<Point>
<coordinates>-0.000000,51.000000</coordinates>
</Point>
</Placemark>
我的 XML 处理程序检查当前元素的名称,然后将该元素的值添加到相关列表中,即
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
if(localName.equals("placemark")) list.setPlaceID(attributes.getValue("id"));
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
if(localName.equals("name")) list.setName(currentValue);
else if(localName.equals("address")) list.setAddress(currentValue);
else if(localName.equals("value")) list.setPostCode(currentValue);
else if(localName.equals("coordinates")) System.out.println(currentValue);
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException{
currentValue = new String(ch, start, length);
}
这成功处理了 99.9% 的情况,但由于某种原因,我无法弄清楚有一些特定的 XML 坐标元素在解析时会产生意外的输出,例如:
<coordinates>-0.328459,51.604121</coordinates>产生4121而不是-0.328459,51.604121<coordinates>-0.060226,51.602341</coordinates>产生26,51.602341而不是-0.060226,51.602341
更令人困惑的是,如果有问题的元素是孤立的,那么它们可以毫无问题地被解析。只有当要解析非常大的数字时,才会有少数几个会导致此问题。
是否有任何明显的解释可以解释这些结果?
【问题讨论】:
标签: java android xml-parsing sax