2014-10-19 2 views
0

Мой Сакс синтаксический анализатор делает странные вещи, когда я пытаюсь разобрать простой файл XML,SAX Parser возвращает тот же элемент в два раза с 2-й раз, как пустой

Это мой файл XML,

<?xml version="1.0"?> 
<organization> 
       <employee> 
           <title>Harry0</title> 
           <link>Smith0</link> 
           <date>hs0</date> 
           <salary>200000-0</salary> 
       </employee> 

       <employee> 
           <title>Harry1</title> 
           <link>Smith1</link> 
           <date>hs1</date> 
           <salary>300000-1</salary> 
       </employee> 

       <employee> 
           <title>Harry2</title> 
           <link>Smith2</link> 
           <date>hs2</date> 
           <salary>300000-2</salary> 
       </employee> 
</organization> 

Now Если я хочу прочитать только title элемент,

String elementValue = null; 
String localName = null; 
@Override 
public void startElement(String uri, String localName, String qName, 
     Attributes attributes) throws SAXException { 
      this.localName = localName; 
} 


@Override 
public void characters(char[] ch, int start, int length) 
     throws SAXException { 
     elementValue = new String(ch, start, length); 
     if (localName.equals("title")){ 
      Log.e(localName,elementValue); 
     } 

} 

и выход,

10-19 14:41:02.261: E/title(7754): Harry0 
10-19 14:41:02.261: E/title(7754):         
10-19 14:41:02.281: E/title(7754): Harry1 
10-19 14:41:02.297: E/title(7754):         
10-19 14:41:02.297: E/title(7754): Harry2 
10-19 14:41:02.297: E/title(7754): 

Имя тега для пустых строк, а также название линии такой же, т.е. title

Почему Sax Parser возвращается все в два раза?

ответ

1

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

Затем парсер ударяет по тегу </title>, но вы его не видите и собираете еще один кусок символов до следующего тега <link>. Вы должны перезаписать методы startElement и endElement, собрать свои строки и сообщить об этом при удалении endElement()

 Смежные вопросы

  • Нет связанных вопросов^_^