【发布时间】:2009-08-24 14:42:51
【问题描述】:
是否有人知道通过 http 快速读取 xml 文件的方法? (例如,我有一个位于http://www.abc.com/file.xml 的文件)。我如何从 Java 应用程序中读取此文件
非常感谢所有帮助
谢谢 达米安
【问题讨论】:
是否有人知道通过 http 快速读取 xml 文件的方法? (例如,我有一个位于http://www.abc.com/file.xml 的文件)。我如何从 Java 应用程序中读取此文件
非常感谢所有帮助
谢谢 达米安
【问题讨论】:
使用java.net.URL 获取InputStream:
final URL url = new URL("http://www.abc.com/file.xml");
final InputStream in = new BufferedInputStream(url.openStream());
// Read the input stream as usual
为简洁起见,省略了异常处理和内容。
【讨论】:
Dave Ray 的回答确实快速而简单,但它不适用于 HTTP 重定向,或者如果您必须通过需要身份验证的代理服务器。不幸的是,标准 Java API 的类(在 java.net 中)缺少某些功能或在这种情况下难以使用。
开源库Apache HttpClient 可以自动处理重定向,并且可以轻松使用需要身份验证的代理服务器。
这是一个基本的例子:
HttpClient client = new HttpClient();
GetMethod method = new GetMethod("http://www.abc.com/file.xml");
int statusCode = client.executeMethod(method);
if (statusCode != HttpStatus.SC_OK) {
System.err.println("Method failed: " + method.getStatusLine());
}
byte[] responseBody = method.getResponseBody();
【讨论】:
如果您打算使用 W3C DOM 并且对任何 IO 或 HTTP 细节不感兴趣,您可以执行以下操作:
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
...
final DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
final DocumentBuilder builder = factory.newDocumentBuilder();
final Document document = builder.parse("http://www.abc.com/file.xml");
【讨论】: