看似随机的SAX输出错误

时间:2011-12-30 14:22:53

标签: java android xml-parsing sax

我正在创建一个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坐标元素在解析时会产生意外的输出,例如:

  1. <coordinates>-0.328459,51.604121</coordinates>生成4121而不是-0.328459,51.604121

  2. <coordinates>-0.060226,51.602341</coordinates>生成26,51.602341而不是-0.060226,51.602341

  3. 更令人困惑的是,如果违规元素被隔离,那么可以毫无问题地解析它们。只有当要解析一个非常大的数字时才会出现这个问题。

    有没有明显的解释可以解释这些结果?

1 个答案:

答案 0 :(得分:2)

使用

currentValue += new String(ch, start, length);

并将其初始化为

currentValue = ""; 
使用后在元素中

原因是标签的内容在有中断的地方以多个块发送。所以你需要连接它。