Java DOMParser 的 IO 异常

Java IO Exception for DOMParser

我正在尝试使用 DOM 解析器和以下代码解析 Java 中的 XML 文件:

import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;

[...]

File file = new File("some/path");
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document document = db.parse(file);

最后一行(调用 .parse() 函数时)出现错误:

java.io.IOException: Server returned HTTP response code: 403 for URL: http://testng.org/testng-1.0.dtd

我该如何解决这个错误?

您是否正在尝试访问代码中的某些内容 URL。 HTTP 403 状态代码表示访问被禁止,这通常在未设置用户代理 header 时发生。您可以设置如下:

URLConnection connection = new URL("https://www.google.com/search?q=" + query).openConnection();
connection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11");

详情请参考this

它正在尝试加载 testng-1.0.dtd,您的 XML 文档的 DTD。

从任何可以获取它的地方自行下载,并配置 DocumentBuilder 通过向 DocumentBuilder.setEntityResolver() 提供 EntityResolver 来在那里查找它。

或者修复您的 HTTP 代理。文档本身不受授权保护,这就是 403 的意思。