Я создал свой собственный 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.
Как видите, она сокращает {{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 ()
, я ничего не пропущу.