2016-11-18 11 views
1

XOM Javaライブラリを使用してan RSS fieldを解析しようとしています。各エントリの画像URLは、下に示すように、<img>要素の属性として格納されます。 .getFirstChildElement("img")<img src="">を解析しようとすると 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= ...>を取得しようとすると、私のコードがクラッシュを作り、NULLポインタを返します。私のプログラムが<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要素はありません。

<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はないこと:どのような項目が含まれていることはこれです

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

を試してみてください。それはプレーンテキストです。

+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); 
    } 
} 
関連する問題