使用远程XML作为文件

时间:2012-02-15 22:27:15

标签: java android xml file-io

  

可能重复:
  How to read XML response from a URL in java?

我正在尝试从我的网络服务器读取XML文件并在ListView上显示它的内容,所以我正在读取这样的文件:

File xml = new File("http://example.com/feed.xml");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(xml);
doc.getDocumentElement().normalize();

NodeList mainNode = doc.getElementsByTagName("article");
// for loop to populate the list...

问题是我收到了这个错误:

  

java.io.FileNotFoundException:/http:/mydomainname.com/feed.xml(没有这样的文件或目录)

为什么我遇到这个问题以及如何纠正它?

3 个答案:

答案 0 :(得分:4)

文件旨在指向本地文件。

如果要指向远程URI,最简单的方法是使用类url

 //modified code
 URL url = new URL("http://example.com/feed.xml");
 URLConnection urlConnection = url.openConnection();
 InputStream in = new BufferedInputStream(urlConnection.getInputStream());

 //your code
 DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
 DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
 Document doc = dBuilder.parse( in );

正如您所看到的,稍后,感谢Java流API,您可以轻松调整代码逻辑以处理文件内容。这是由于类DocumentBuilder中的解析方法过载。

答案 1 :(得分:1)

您需要使用HTTPURLConnection将xml作为输入流并将其传递给DocumentBuilder,然后您可以使用您拥有的逻辑。

DefaultHttpClient client = new DefaultHttpClient();
HttpResponse resp = client.execute(yourURL);

if(resp.getStatusCode == 200)
{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(resp.getEntity().getContent());
}

注意:我只是在这里输入,可能存在语法错误。

答案 2 :(得分:0)

您需要使用URL对象读取文件。例如,尝试这样的事情:

URL facultyURL = new URL("http://example.com/feed.xml");
InputStream is = facultyURL.openStream();