Как анализировать несколько потоков XML одновременно из массива URL с помощью SAX Parser для Java? - PullRequest
1 голос
/ 25 ноября 2010

Я работаю над приложением Android, которое анализирует один или несколько каналов XML на основе пользовательских предпочтений.Можно ли анализировать (используя SAX Parser) более одного XML-канала одновременно, предоставив синтаксическому анализатору массив URL-адресов моих XML-каналов?

Если нет, каков альтернативный способ составления списка проанализированногоэлементы из разных XML-каналов в одном списке?Интуитивный подход заключается в использовании java.io.SequenceInputStream для объединения двух входных потоков.Однако это вызывает исключение NullPointerException:

try {
  URL urlOne = new URL("http://example.com/feedone.xml");
  URL urlTwo = new URL("http://example.com/feedtwo.xml");
  InputStream streamOne = urlOne.openStream();
  InputStream streamTwo = urlTwo.openStream();
  InputStream streamBoth = new SequenceInputStream(streamOne, streamTwo);
  InputSource sourceBoth = new InputSource(streamBoth);
  //Parsing
  stream = xmlHandler.getStream();
  }
catch (Exception error) {
  error.printStackTrace();
}
List<Item> content = stream.getList();
return content;

1 Ответ

1 голос
/ 25 ноября 2010

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

<?xml version="1.0" encoding="UTF-8"?>

, что также недопустимо.

Хотя можно предварительно обработать ввод для решения этих проблем, вам, вероятно, лучше разбирать ихотдельно и о получении результатов, объединенных позже.

Можно сделать синтаксический анализатор SAX, добавив проанализированные элементы в существующий список элементов.Если вы отправите код в своем вопросе, показывающий, как вы анализируете один файл, мы могли бы помочь выяснить, как настроить его в соответствии с вашими потребностями в нескольких входах.

...