你好,我有一个大问题 . 我必须从URL / HTTP解析XML文件并在java中处理它,但是当我这样做时我总是得到异常 . 地址很好,因为它是银行的www . 请帮我
import java.net.URL;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
public class MainClass {
public static void main(String [] args){
String url = "http://api.nbp.pl/api/exchangerates/rates/c/gbp/2015-01-01/2015-01-31";
try
{
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(new URL(url).openStream());
doc.getDocumentElement().normalize();
System.out.println ("Root element: " +
doc.getDocumentElement().getNodeName());
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
error :
[致命错误]:1:1:prolog中不允许内容 . org.xml.sax.SAXParseException; lineNumber:1; columnNumber:1;序言中不能有内容 . at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(Unknown Source)at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(Unknown Source)at javax.xml.parsers pl.parser.nbp.MainClass.main中的.DocumentBuilder.parse(未知来源)(MainClass.java:17)
and second case :
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class MainClass {
public static void main(String [] args){
String url = "http://api.nbp.pl/api/exchangerates/rates/a/gbp/2012-01-01/2012-01-31/";
try
{
DocumentBuilderFactory f =
DocumentBuilderFactory.newInstance();
DocumentBuilder b = f.newDocumentBuilder();
Document doc = b.parse(url);
doc.getDocumentElement().normalize();
System.out.println ("Root element: " +
doc.getDocumentElement().getNodeName());
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
error :
[致命错误]:1:1:prolog中不允许内容 . org.xml.sax.SAXParseException; systemId:http://api.nbp.pl/api/exchangerates/rates/a/gbp/2012-01-01/2012-01-31/; lineNumber:1; columnNumber:1;序言中不能有内容 . at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(Unknown Source)at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(Unknown Source)at javax.xml.parsers pl.parser.nbp.MainClass.main中的.DocumentBuilder.parse(未知来源)(MainClass.java:19)
2 回答
默认情况下,URL以JSON格式返回数据 . 您在浏览器中看到XML,因为浏览器协商返回类型的方式(通过Accept标头) .
您可以将数据解析为JSON,也可以将URL更改为
http://api.nbp.pl/api/exchangerates/rates/c/gbp/2015-01-01/2015-01-31?format=xml
.最后请注意
?format=xml
.见User manual .
问题是直接从URL读取,该站点将以json格式返回数据 . 您需要打开URL,请求xml
这将打印