2010-10-27 2 views
2

Я пытаюсь разобрать xml-файл с помощью SAX с Android, и проблема в том, что функциональные символы (...) вызывается несколько раз с тем, что появляется чтобы быть теми же данными, которые просто компенсируются несколькими символами.SAX на Android получает вызов несколько раз с теми же данными, но смещение

Как вы можете сказать, на выходе ниже в первый раз его вызывают с помощью «\ talabama», а во второй раз его вызывают с помощью «labama». Я не уверен, почему он это делает, но если кто-то может помочь, это будет потрясающе.

XML Input:

<?xml version="1.0" encoding="utf-8"?> 
<dir><name>.</name> 
    <dir><name>alabama</name> 
     <dir><name>sub_dir_name</name> 
      <file><name>file_name.kml</name></file> 
     </dir> 
    </dir> 
</dir> 

Вывод символов (...):

10-27 23:04:47.033: DEBUG/LocationHandler(10299):  
10-27 23:04:49.000: DEBUG/LocationHandler(10299):  alabama 
10-27 23:04:51.835: DEBUG/LocationHandler(10299): labama 
10-27 23:04:52.129: DEBUG/LocationHandler(10299): labama  abama 
10-27 23:04:52.408: DEBUG/LocationHandler(10299): labama  abamasub_dir_name 
10-27 23:04:52.519: DEBUG/LocationHandler(10299): ub_dir_name 
10-27 23:04:52.649: DEBUG/LocationHandler(10299): ub_dir_name   _dir_name 
10-27 23:04:52.809: DEBUG/LocationHandler(10299): ub_dir_name   _dir_namefile_name.kml 
10-27 23:04:52.989: DEBUG/LocationHandler(10299): ile_name.kml 
10-27 23:04:53.158: DEBUG/LocationHandler(10299): ile_name.kml  le_name.kml 
10-27 23:04:53.358: DEBUG/LocationHandler(10299):  le_name.kml 
10-27 23:04:53.529: DEBUG/LocationHandler(10299):  le_name.kml  le_name.kml 
10-27 23:04:53.698: DEBUG/LocationHandler(10299):  le_name.kml 

Handler Overides:

@Override 
public void startElement(String uri, String localName, String qName, 
    Attributes attributes) throws SAXException 
{ 
} 

@Override 
public void endElement(String uri, String localName, String qName) 
    throws SAXException 
{ 
    _currentElementValue = ""; 
} 

@Override 
public void characters(char[] ch, int start, int length) throws SAXException 
{ 
    _currentElementValue += new String(ch); 

    Log.d(TAG, _currentElementValue); 
} 
+0

Покажите нам, что вы печатаете, как вы выводите этот материал отладки. – Falmarri

+0

. Отправьте код. Вы почти наверняка не понимаете контракт по методу символов, но это будет намного проще объяснить с помощью кода для контекста. –

+0

Не уверен, что редактирование уведомляет людей, которые комментируют, но я добавил код к вопросу. –

ответ

1

я вижу очевидную проблему в коде, в метод characters(), вы не можете создать строку вслепую только с массивом char. Он должен выглядеть следующим образом:

 


public void characters(char[] ch, int start, int length) throws SAXException 
{ 
    _currentElementValue += new String(ch, start, length); 

    Log.d(TAG, _currentElementValue); 
} 

 

Возможно, вам захочется узнать больше о том, как работает синтаксический анализ SAX.

+0

Ты добрый, сэр! Я действительно новичок в Java в целом, поэтому мне есть чему поучиться. –

+0

Есть много примеров. вот одно: http://www.rgagnon.com/javadetails/java-0408.html – Ramp