2016-11-18 3 views
1

Я пытаюсь разобрать an RSS field с использованием библиотеки Java XOM. URL-адрес изображения каждой записи сохраняется как атрибут для элемента <img>, как показано ниже. Невозможно проанализировать атрибут элемента с помощью XOM

<rss version="2.0"> 
    <channel> 
    <item> 
     <title>Decision Paralysis</title> 
     <link>https://xkcd.com/1801/</link> 
     <description> 
     <img src="https://imgs.xkcd.com/comics/decision_paralysis.png"/> 
     </description> 
     <pubDate>Mon, 20 Feb 2017 05:00:00 -0000</pubDate> 
     <guid>https://xkcd.com/1801/</guid> 
    </item> 
    </channel> 
</rss> 

Попытка разобрать <img src=""> с .getFirstChildElement("img") только возвращает нулевой указатель, что делает мой крах кода при попытке извлечь <img src= ...>. Почему моя программа не читается в элементе <img> и как я могу прочитать ее правильно?

import nu.xom.*; 

public class RSSParser { 
    public static void main() { 
     try { 
      Builder parser = new Builder(); 
      Document doc = parser.build ("https://xkcd.com/rss.xml"); 
      Element rootElement = doc.getRootElement(); 
      Element channelElement = rootElement.getFirstChildElement("channel"); 
      Elements itemList = channelElement.getChildElements("item"); 

      // Iterate through itemList 
      for (int i = 0; i < itemList.size(); i++) { 
       Element item = itemList.get(i); 
       Element descElement = item.getFirstChildElement("description"); 
       Element imgElement = descElement.getFirstChildElement("img"); 
       // Crashes with NullPointerException 
       String imgSrc = imgElement.getAttributeValue("src"); 
      } 
     } 
     catch (Exception error) { 
      error.printStackTrace(); 
      System.exit(1); 
     } 
    } 
} 

ответ

0

В изделии нет элемента img. Попробуйте

if (imgElement != null) { 
    String imgSrc = imgElement.getAttributeValue("src"); 
    } 

Что элемент содержит это:

<description>&lt;img  
    src="http://imgs.xkcd.com/comics/us_state_names.png" 
    title="Technically DC isn't a state, but no one is too 
    pedantic about it because they don't want to disturb the snakes 
    ." 
    alt="Technically DC isn't a state, but no one is too pedantic about it because they don't want to disturb the snakes." /&gt; 
</description> 

Это не IMG elment. Это простой текст.

+0

Это не решит проблему неспособности выполнить синтаксический анализ 'img src =' –

0

Мне удалось создать несколько хакерское решение с использованием регулярного выражения и соответствия шаблону.

// Iterate through itemList 
for (int i = 0; i < itemList.size(); i++) { 
    Element item = itemList.get(i); 
    String descString = item.getFirstChildElement("description").getValue(); 

    // Parse image URL (hacky) 
    String imgSrc = ""; 
    Pattern pattern = Pattern.compile("src=\"[^\"]*\""); 
    Matcher matcher = pattern.matcher(descString); 
    if (matcher.find()) { 
     imgSrc = descString.substring(matcher.start()+5, matcher.end()-1); 
    } 
} 
Смежные вопросы