【问题标题】:Unable to parse element attribute with XOM无法使用 XOM 解析元素属性
【发布时间】:2016-11-18 22:49:55
【问题描述】:

我正在尝试使用 XOM Java 库解析 an RSS field。每个条目的图像 URL 都存储为 <img> 元素的属性,如下所示。

<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>

尝试用.getFirstChildElement("img") 解析&lt;img src=""&gt; 只返回一个空指针,当我尝试检索&lt;img src= ...&gt; 时使我的代码崩溃。为什么我的程序无法读取&lt;img&gt; 元素,我该如何正确读取它?

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);
        }
    }
}

【问题讨论】:

    标签: java rss xom


    【解决方案1】:

    项目中没有 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 src=的问题
    【解决方案2】:

    我设法使用正则表达式和模式匹配想出了一个有点老套的解决方案。

    // 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 );
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-27
      • 2010-09-07
      • 1970-01-01
      • 1970-01-01
      • 2013-06-17
      • 1970-01-01
      • 1970-01-01
      • 2013-08-14
      相关资源
      最近更新 更多