从 url 解析 xml 文件时发生 java 错误

标签 java xml json jdom

我正在尝试用 java 解析 XML 文件,但遇到了问题。该代码在解析过程中显示错误,就像获取 JSON 文件一样。我该如何解决这个问题?

URL url2 = new URL("https://api.eancdn.com/ean-services/rs/hotel/v3/list?cid=55505&minorRev=99&apiKey=cbrzfta369qwyrm9t5b8y8kf&locale=en_US&currencyCode=USD&longitude=0.1275&latitude=51.5072&xml=%3CHotelListRequest%3E%0A%20%20%20%20%3Ccity%3ESeattle%3C%2Fcity%3E%0A%20%20%20%20%3CstateProvinceCode%3EWA%3C%2FstateProvinceCode%3E%0A%20%20%20%20%3CcountryCode%3EUS%3C%2FcountryCode%3E%0A%20%20%20%20%3CarrivalDate%3E11%2F25%2F2014%3C%2FarrivalDate%3E%0A%20%20%20%20%3CdepartureDate%3E11%2F27%2F2014%3C%2FdepartureDate%3E%0A%20%20%20%20%3CRoomGroup%3E%0A%20%20%20%20%20%20%20%20%3CRoom%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3CnumberOfAdults%3E2%3C%2FnumberOfAdults%3E%0A%20%20%20%20%20%20%20%20%3C%2FRoom%3E%0A%20%20%20%20%3C%2FRoomGroup%3E%0A%20%20%20%20%3CnumberOfResults%3E25%3C%2FnumberOfResults%3E%0A%3C%2FHotelListRequest%3E");
InputStream is2 = url2.openStream();

SAXBuilder builder = new SAXBuilder();
Document doc = builder.build(is2);
StringBuilder sb = new StringBuilder();
Element root = doc.getRootElement();
List<Element> HotelList = 
        root.getChildren("HotelList");
Element Hotel = HotelList.get(0);  
List<Element> SummaryList = 
        Hotel.getChildren("HotelSummary");
Element Summary = SummaryList.get(0);
Element Sum;
for(int f=0; f< SummaryList.size(); f++){
    Sum = SummaryList.get(f);

    sb.append("Hotel ID: " + Sum.getChildText("hotelId") +"\n" + "Name: " + Sum.getChildText("name") + "\n");
    sb.append("HotelRating: " + Sum.getChildText("hotelRating")+ "\n");

}System.out.println(sb);

错误:

org.jdom2.input.JDOMParseException: Error on line 1: Content is not allowed in prolog.
    at org.jdom2.input.sax.SAXBuilderEngine.build(SAXBuilderEngine.java:232)
    at org.jdom2.input.sax.SAXBuilderEngine.build(SAXBuilderEngine.java:253)
    at org.jdom2.input.SAXBuilder.build(SAXBuilder.java:1091)
    at HotelInfo.main(HotelInfo.java:22)
Caused by: org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; Content is not allowed in prolog.
    at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
    at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
    at org.jdom2.input.sax.SAXBuilderEngine.build(SAXBuilderEngine.java:217)
    ... 3 more

最佳答案

使用curl查看返回的数据。它是 JSON,而不是 XML,因此您不能以这种方式解析它。请改用 JSON 解析器,或找出使服务返回 XML 所需的 API 参数。

关于从 url 解析 xml 文件时发生 java 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26615498/

相关文章:

java - 动态/Onspot JTextfield 到 JLabel

java - JInternalFrame 与 jtable,位于 JFrame 内部

xml - 如何在 XPath 中进行否定连接 ("except")?

用于在 XML 中存储设置的 C++ 库

java - Wildfly 16 中的类加载问题

java - 在java中解析JSON

PHP MySQL JSON 按数据组织

java - toString 副作用是否应用于 java 调试?

java.lang.StringIndexOutOfBoundsException : String index out of range: -1

javascript - 使用 json 的 ExtJS 存储初始化失败