我正在创建一个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
更令人困惑的是,如果违规元素被隔离,那么可以毫无问题地解析它们。只有当要解析一个非常大的数字时才会出现这个问题。
有没有明显的解释可以解释这些结果?
答案 0 :(得分:2)
使用
currentValue += new String(ch, start, length);
并将其初始化为
currentValue = "";
使用后在。
原因是标签的内容在有中断的地方以多个块发送。所以你需要连接它。