Android синтаксический анализатор SAX, не получая полный текст из-за тегов

Я создал свой собственный DefaultHandler для парсинга RSS лент, и для большей части подачи он хорошо работает, однако, для ESPN, он отключает часть URL статьи из-за пути форматы ESPN, это - URL. Пример URL полного текста статьи из ESPN..

http://sports.espn.go.com/nba/news/story?id=5189101&campaign=rss&source=ESPNHeadlines

Проблемой является по некоторым причинам метод символов DefaultHandler, только получает это от тега, который содержит вышеупомянутый URL.

http://sports.espn.go.com/nba/news/story?id=5189101

Как Вы видите, это сокращает все от URL из управляющего кода амперсанда и после. Как я могу заставить синтаксический анализатор SAX не отключать мою строку в этом управляющем коде? Поскольку касательно вот мой метод символов..

 public void characters(char ch[], int start, int length) {

  String chars = (new String(ch).substring(start, start + length));

  try {
   // If not in item, then title/link refers to feed
   if (!inItem) {
    if (inTitle)
     currentFeed.title = chars;
   } else {
    if (inLink)
     currentArticle.url = new URL(chars);
    if (inTitle)
     currentArticle.title = chars;
    if (inDescription)
     currentArticle.description = chars;
    if (inPubDate)
     currentArticle.pubDate = chars;
    if (inEnclosure) {
    }
   }
  } catch (MalformedURLException e) {
   Log.e("RSSReader", e.toString());
  }
 }

Rob W.

21
задан brockoli 14 May 2010 в 22:44
поделиться

1 ответ

Как видите, она сокращает {{1} } все, что находится за пределами URL-адреса, из escape-кода амперсанда и после него.

Из документации метода characters () :

Синтаксический анализатор вызовет этот метод, чтобы сообщить о каждом фрагменте символьных данных. {{1 }} Синтаксические анализаторы SAX могут возвращать все смежные символьные данные в одном фрагменте или могут разбивать его на несколько фрагментов; однако все символы в любом {{1 }} одно событие должно исходить от одного и того же внешнего объекта , чтобы локатор предоставлял полезную информацию.

Когда я пишу синтаксические анализаторы SAX, я использую StringBuilder для добавления всего переданного в символов () :

public void characters (char ch[], int start, int length) {
    if (buf!=null) {
        for (int i=start; i<start+length; i++) {
            buf.append(ch[i]);
        }
    }
}

Затем в endElement () , я возьмите содержимое StringBuilder и сделайте с ним что-нибудь. Таким образом, если синтаксический анализатор несколько раз вызовет characters () , я ничего не пропущу.

46
ответ дан 29 November 2019 в 06:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: