2017-01-18 2 views
0

Я пытаюсь работать с небольшими XML файлами, отправленными из Интернета, и разбирать с ними несколько атрибутов. Как бы я подошел к этому в JSoup? Я знаю, что это не XML Parser но HTML один, но он поддерживает XML тоже и не надо строить никаких обработчиков, BuildFactories и такие, как я бы в DOM, SAX и т.д.Невозможно разобрать XML (из Интернета) с помощью JSoup

Вот пример XML: LINK I не может вставить его здесь, потому что он выходит из тега кода после каждой строки - если кто-то может исправить это, я был бы благодарен.

А вот мой кусок кода ::

String xml = "http://www.omdbapi.com/?t=Private%20Ryan&y=&plot=short&r=xml"; 
Document doc = Jsoup.parse(xml, "", Parser.xmlParser()); 
// want to select first occurrence of genre tag though there is only one it 
// doesn't work without .first() - but it doesn't parse it 
Element genreFromXml = doc.select("genre").first(); 
String genre = genreFromXml.text(); 
System.out.println(genre); 

Это приводит к NPE на:

String genre = genreFromXml.text(); 

ответ

2

Есть 2 проблемы в вашем коде:

  1. Вы обеспечиваете String Представление URL, а содержание XML ожидается, вам следует использовать метод parse(InputStream in, String charsetName, String baseUri, Parser parser) вместо этого, чтобы проанализировать ваш XML как входной поток.
  2. Элемент genre в вашем XML, genre является атрибутом элемента movie.

Вот как ваш код должен выглядеть следующим образом:

String url = "http://www.omdbapi.com/?t=Private%20Ryan&y=&plot=short&r=xml"; 
// Parse the doc using an XML parser 
Document doc = Jsoup.parse(new URL(url).openStream(), "UTF-8", "", Parser.xmlParser()); 
// Select the first element "movie" 
Element movieFromXml = doc.select("movie").first(); 
// Get its attribute "genre" 
String genre = movieFromXml.attr("genre"); 
// Print the result 
System.out.println(genre); 

Выход:

Drama, War 
+0

Я должен справиться с искаженной и IO Исключения из URL справа? Моя IDE говорит, что я знаю, но хочу с вами пообщаться. – doublemc

+0

Да, вам нужно иметь дело с исключением, вы можете просто выбросить его –

+0

Знаете ли вы, как я могу получить доступ к первому слову в жанре, не работая над массивом String, чтобы выбрать только «Драма»? Потому что очень часто фильмы в IMDB имеют множество жанров, и мне нужен только один. – doublemc

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