как проанализировать все типы rss-каналов в одном анализаторе sax в Android

#android #rss #rdf #feed

#Android #RSS-канал #rdf #лента

Вопрос:

в моем приложении я пытаюсь проанализировать URL-адрес RSS-канала. Он работает нормально, без каких-либо ошибок. Но теперь я беспокоюсь о других типах rss-каналов, таких как RDF и Autumn.

Сначала я не имею ни малейшего представления об этих каналах. Теперь проблема в том, что в моем приложении, когда пользователь анализирует URL-адрес RSS-канала, он будет работать нормально, но если пользователь анализирует RDF-канал или осенний канал, я уверен, что он не получит никакого контента из этих каналов, потому что открывающие теги отличаются для всех этих каналов.

Я беспокоюсь, что это создаст проблему в моем приложении, как преодолеть эту проблему…

Я знаю, что я должен указать открывающие теги. У меня есть логическая идея использовать switch case для каждого тега, который они связывают с RSS-каналом, RDF-каналом и так далее, но я не знаю, как это реализовать…

Пожалуйста, кто-нибудь, помогите мне…..

Ответ №1:

Я предполагаю, что вы в какой-то момент в своем обработчике делаете что-то вроде

 if (localName.equals("tag")
{
   // inside an <tag> field
}
  

и там вы, конечно, можете просто перейти

 if ((localName.equals("tag1")) || (localName.equals("tag2") || ...)
  

для каждого из различных открывающих имен тегов. Тем не менее, мне кажется более аккуратным, если вы можете получить / узнать тип канала перед его анализом, просто иметь разные пользовательские анализаторы xml для каждого (например, RSSXMLHandler, RDFXMLHandler и т.д.) И Использовать их как

   SAXParserFactory spf = SAXParserFactory.newInstance();
  SAXParser sp = spf.newSAXParser();

  XMLReader xr = sp.getXMLReader();

  if (feedType.equals("RSS"))
  {
    RSSXMLHandler mHandler = new RSSXMLHandler();
  }
  else if (feedType.equals("RDF"))
  {
    RDFXMLHandler mHandler = new RDFXMLHandler();
  }
  else if (andSoOn)
  {
  }

  xr.setContentHandler(mHandler);
  

Таким образом, если что-то изменится — например, предположим, что формат RDF-канала изменится — вам не придется беспокоиться о прерывании чтения RSS / Autumn и т.д. ленты при ее обновлении.