我有一個奇怪的問題,我不得不解析XML文件來獲取數據,當我解析文件時: http://www.nbp.pl/kursy/xml/c073z070413.xml,所有工作都正常(文件被解析),但是當我嘗試解析文件:http://www.nbp.pl/kursy/xml/a002z020103.xml然後我得到一個消息,該程序無法找到這個文件(在瀏覽器,XML文件中的作品)Java IO無法從URL中找到現有文件
例外:
java.io.FileNotFoundException:C:\項目\ AreYouSmart \ abch.dtd (找不到文件)
下面是一個完整的示例代碼。 (代碼從StackOverflow: XML parse file from HTTP拍攝)
public class TylkoPobieranie {
public static void main(String[] args) {
try {
new TylkoPobieranie().start();
} catch (Exception e) {
e.printStackTrace();
}
}
private void start() throws Exception {
// link work: URL url = new URL("http://www.nbp.pl/kursy/xml/c073z070413.xml");
URL url = new URL("http://www.nbp.pl/kursy/xml/a002z020103.xml");
URLConnection connection = url.openConnection();
Document doc = parseXML(connection.getInputStream());
NodeList descNodes = doc.getElementsByTagName("pozycja");
for (int i = 0; i < descNodes.getLength(); i++) {
System.out.println(descNodes.item(i).getTextContent());
}
}
private Document parseXML(InputStream stream) throws Exception {
DocumentBuilderFactory objDocumentBuilderFactory = null;
DocumentBuilder objDocumentBuilder = null;
Document doc = null;
try {
objDocumentBuilderFactory = DocumentBuilderFactory.newInstance();
//ANSWER:
objDocumentBuilderFactory.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
objDocumentBuilder = objDocumentBuilderFactory.newDocumentBuilder();
doc = objDocumentBuilder.parse(stream);
} catch (Exception ex) {
throw ex;
}
return doc;
}
}
您能否顯示每個XML文件的起始位置 - 在我看來,第二個文件是指在您的計算機上找不到的DTD(C :\ Projects \ AreYouSmart \ abch.dtd) - 順便說一句,我無法從我的瀏覽器打開第二個文件 – DaveH
你可以看看http://stackoverflow.com/questions/155101/make-documentbuilder-parse-ignore -dtd-引用來查看如何忽略第二個文件中的DTD – DaveH
@DaveHowes我將在您的評論中添加對DTD的引用位於a002z020103.xml文件(第二行)我將刪除我的答案首先發現問題。 –