2012-11-14 26 views
1

我还有Vimeo下面的XML文件:http://vimeo.com/api/v2/video/21331554.xml的Java解析XML的Vimeo - 提取缩略图URL

我试图提取与下面的代码缩略图介质:

File fXmlFile = new File("http://vimeo.com/api/v2/video/" + linkId + ".xml"); 
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); 
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); 
Document doc = dBuilder.parse(fXmlFile); 
doc.getDocumentElement().normalize(); 
return ((Node) doc.getElementsByTagName("thumbnail_medium")).getNodeValue(); 

,但我得到“未定义”作为回报

回答

1

你不能投了NodeListNode所以这行:

return ((Node) doc.getElementsByTagName("thumbnail_medium")).getNodeValue(); 

抛出ClassCastException。所以,你需要得到的唯一项目的节点列表,并与该行获取其文本值:

return doc.getElementsByTagName("thumbnail_medium").item(0).getTextContent(); 

我这两种方法来测试这一点:

@Test 
public void domTestVimeo() throws ParserConfigurationException, 
     SAXException, IOException { 

    DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); 
    DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); 
    Document doc = dBuilder.parse(new ClassPathResource("vimeo.xml") 
      .getInputStream()); 
    doc.getDocumentElement().normalize(); 

    String val = ((Node) doc.getElementsByTagName("thumbnail_medium")) 
      .getNodeValue(); 

    System.out.println(val); 

} 

而且

@Test 
public void yourTest() throws ParserConfigurationException, SAXException, 
     IOException { 
    // File fXmlFile = new File("http://vimeo.com/api/v2/video/" + 21331554 
    // + ".xml"); 

    InputStream is = new ClassPathResource("vimeo.xml").getInputStream(); 

    DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); 
    DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); 
    Document doc = dBuilder.parse(is); 
    doc.getDocumentElement().normalize(); 
    String val = doc.getElementsByTagName("thumbnail_medium").item(0) 
      .getTextContent(); 

    System.out.println(val); 

} 

第一个抛出ClassCastException,第二个打印http://b.vimeocdn.com/ts/137/151/137151977_200.jpg我认为这是你正在寻找的价值。

此外,您是如何从File对象读取传递URL的?

+0

噢非常感谢你花时间给我详细的答案,我明天会检查一下。是的,只是注意到这一点以及URL和文件我不知道:) –

+0

我有一些麻烦的ClassPathResource,我不知道从包这个类是从(我也使用GAE) –

+0

好吧我替换ClassPathRessource通过URL(),它现在对我来说很好,再次感谢;) –