Я создаю приложение для 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
Еще более запутанно, если нарушающие элементы изолированы, то они могут быть проанализированы без проблем. Только когда очень большое число должно быть проанализировано, некоторые из них вызывают эту проблему.
Существуют ли очевидные объяснения, которые могли бы объяснить эти результаты?