0

我正在尝试在 xml 中获取项目的信息,如下所示:

<item>
  <title>The Colbert Report - Confused by Rick Parry With an "A" for America</title>

  <guid isPermaLink="false">http://www.hulu.com/watch/267788/the-colbert-report-confused-by-rick-parry-with-an-a-for-america#http%3A%2F%2Fwww.hulu.com%2Ffeed%2Fpopular%2Fvideos%2Fthis_week%3Frd%3D0</guid>
  <link>http://rss.hulu.com/~r/HuluPopularVideosThisWeek/~3/6aeJ5cWMBzw/the-colbert-report-confused-by-rick-parry-with-an-a-for-america</link>
  <description>&lt;a href="http://www.hulu.com/watch/267788/the-colbert-report-confused-by-rick-parry-with-an-a-for-america#http%3A%2F%2Fwww.hulu.com%2Ffeed%2Fpopular%2Fvideos%2Fthis_week%3Frd%3D0"&gt;&lt;img src="http://thumbnails.hulu.com/507/40025507/40025507_145x80_generated.jpg" align="right" hspace="10" vspace="10" width="145" height="80" border="0" /&gt;&lt;/a&gt;&lt;p&gt;The fat cat media elites in Des Moines think they can sit in their ivory corn silos and play puppet master with national politics.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.hulu.com/users/add_to_playlist?from=feed&amp;video_id=267788"&gt;Add this to your queue&lt;/a&gt;&lt;br/&gt;Added: Fri Aug 12 09:59:14 UTC 2011&lt;br/&gt;Air date: Thu Aug 11 00:00:00 UTC 2011&lt;br/&gt;Duration: 05:39&lt;br/&gt;Rating: 4.7 / 5.0&lt;br/&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/HuluPopularVideosThisWeek/~4/6aeJ5cWMBzw" height="1" width="1"/&gt;</description>

  <pubDate>Fri, 12 Aug 2011 09:59:14 -0000</pubDate>
  <media:thumbnail height="80" width="145" url="http://thumbnails.hulu.com/507/40025507/40025507_145x80_generated.jpg" />
  <media:credit>Comedy Central</media:credit>
  <dcterms:valid>start=2011-08-12T00:15:00Z; end=2011-09-09T23:45:00Z; scheme=W3C-DTF</dcterms:valid>
  <feedburner:origLink>http://www.hulu.com/watch/267788/the-colbert-report-confused-by-rick-parry-with-an-a-for-america#http%3A%2F%2Fwww.hulu.com%2Ffeed%2Fpopular%2Fvideos%2Fthis_week%3Frd%3D0</feedburner:origLink></item>
<item>

我需要标题、链接、媒体:缩略图 url 和描述。

我使用了以下方法:http ://www.rgagnon.com/javadetails/java-0573.html

标题和链接的工作正常,但图像网址和描述却不行。

有人可以帮我弄这个吗?

4

4 回答 4

3

您可以使用 XPath 从 XML 文档中检索特定数据。

例如为了检索 url 属性的内容:

XPathFactory factory = XPathFactory.newInstance();

XPath xpath = factory.newXPath();
String url = xpath.evaluate("/item/media:thumbnail/@url", new InputSource("data.xml"));
于 2011-08-26T22:04:00.193 回答
2

对于纯 DOM 解决方案,您可以使用以下代码来获取所需的值:

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse("document.xml");

Element item = doc.getDocumentElement(); // assuming that item is a root element
NodeList itemChilds = item.getChildNodes();

for (int i = 0; i != itemChilds.getLength(); ++i)
{
    Node itemChildNode = itemChilds.item(i);
    if (!(itemChildNode instanceof Element))
        continue;
    Element itemChild = (Element) itemChildNode;
    String itemChildName = itemChild.getNodeName();

    if (itemChildName.equals("title")) // possible switch in Java 7
        System.out.println("title: " + itemChild.getTextContent());
    else if (itemChildName.equals("link"))
        System.out.println("link: " + itemChild.getTextContent());
    else if (itemChildName.equals("description"))
        System.out.println("description: " + itemChild.getTextContent());
    else if (itemChildName.equals("media:thumbnail"))
        System.out.println("image url: " + itemChild.getAttribute("url"));
}

结果:

title: The Colbert Report - Confused by Rick Parry With an "A" for America
link: http://rss.hulu.com/~r/HuluPopularVideosThisWeek/~3/6aeJ5cWMBzw/the-colbert..
description: <a href="http://www.hulu.com/watch/267788/the-colbert-report-confuse..
image url: http://thumbnails.hulu.com/507/40025507/40025507_145x80_generated.jpg
于 2011-08-26T22:34:27.363 回答
2
    try {
        DocumentBuilderFactory dbf =
        DocumentBuilderFactory.newInstance();
        DocumentBuilder db = dbf.newDocumentBuilder();
        InputSource is = new InputSource(new FileReader(new File("item.xml")));

        Document doc = db.parse(is);
        NodeList nodes = doc.getElementsByTagName("item");

        // iterate the employees
        for (int i = 0; i < nodes.getLength(); i++) {
           Element element = (Element) nodes.item(i);

           NodeList title = element.getElementsByTagName("title");
           Element line = (Element) title.item(0);
           System.out.println("title: " + line.getTextContent());

           NodeList link = element.getElementsByTagName("link");
           line = (Element) link.item(0);
           System.out.println("link: " + line.getTextContent());

           NodeList mt = element.getElementsByTagName("media:thumbnail");
           line = (Element) mt.item(0);
           System.out.println("media:thumbnail: " + line.getTextContent());

           Attr url = line.getAttributeNode("url");
           System.out.println("media:thumbnail -> url: " + url.getTextContent());
        }
    }
    catch (Exception e) {
        e.printStackTrace();
    }

对于 url,您首先获取元素 media:thumbnail,然后由于 url 是 media:thumbnail 的属性,因此您只需从 media:thumbnail 元素中调用函数 getAttributeNode("url")。

于 2011-08-26T22:09:44.843 回答
0

这里的问题是描述标签包含一个转义的 xml(或者可能是 html)字符串,而不仅仅是 xml。

可能最简单的做法是获取此标记包含的文本并打开另一个 XML 解析器将其解析为单独的 XML 文档。如果它实际上是一个 html 片段并且不是有效的 xml,这可能不起作用。

于 2011-08-26T22:03:19.880 回答