簡體   English   中英

從API提要(Java)解析XML

[英]Parsing XML from API feed (Java)

這是我第一次在網站上發布問題。 幾天來我一直在尋找解決方案,並且可能會有一個解決方案。 但是,我找不到任何能夠解決我問題的方法,因此希望您能為我提供幫助。 另外,我不是Java方面的佼佼者,因此這個問題可能最終變得荒謬而愚蠢。

我正在嘗試從URL解析天氣xml文件,並且繼續收到XPathExpression錯誤。

public class WeatherBugAPI {

private XPath xpath = XPathFactory.newInstance().newXPath();


String API_KEY = "A***************";

public void getLiveWeather(String zipcode) throws Exception{
        DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
        builderFactory.setNamespaceAware(true);
        DocumentBuilder builder = builderFactory.newDocumentBuilder();
        URL xml = new
        URL("http://A**********.api.wxbug.net/getLiveCompactWeatherRSS.aspx?acode=A**********&zipcode=" + zipcode);
    try{
        InputStream is = xml.openStream();
        Document document = builder.parse(is);
        XPathExpression expr = xpath.compile("//aws:weather");
        Node node = (Node)xpath.evaluate("//aws:weather", is, XPathConstants.NODE);

        LiveWeather weather = new LiveWeather(xpath, node);
        System.out.println(weather);

    } catch(XPathExpressionException e){
        System.out.println("Failed to parse forcast!");
        e.printStackTrace();
    }
  }
}

我的LiveWeather類別的所有各種屬性的陳述都與以下陳述相似。 (有很多)

stationZipcode = (String)xpath.evaluate("//aws:city-state/@zipcode", node, XPathConstants.STRING);

最后是堆棧跟蹤:

Failed to parse forcast!

javax.xml.transform.TransformerException: Unable to evaluate expression using this context
    at com.sun.org.apache.xpath.internal.XPath.execute(XPath.java:363)
    at com.sun.org.apache.xpath.internal.jaxp.XPathImpl.eval(XPathImpl.java:213)
    at com.sun.org.apache.xpath.internal.jaxp.XPathImpl.evaluate(XPathImpl.java:275)
    at WeatherBugAPI.getLiveWeather(WeatherBugAPI.java:36)
    at test.main(test.java:5)
Caused by: java.lang.RuntimeException: Unable to evaluate expression using this context
    at com.sun.org.apache.xpath.internal.axes.NodeSequence.setRoot(NodeSequence.java:212)
    at com.sun.org.apache.xpath.internal.axes.LocPathIterator.execute(LocPathIterator.java:210)
    at com.sun.org.apache.xpath.internal.XPath.execute(XPath.java:335)
    ... 4 more
---------
java.lang.RuntimeException: Unable to evaluate expression using this context
    at com.sun.org.apache.xpath.internal.axes.NodeSequence.setRoot(NodeSequence.java:212)
    at com.sun.org.apache.xpath.internal.axes.LocPathIterator.execute(LocPathIterator.java:210)
    at com.sun.org.apache.xpath.internal.XPath.execute(XPath.java:335)
    at com.sun.org.apache.xpath.internal.jaxp.XPathImpl.eval(XPathImpl.java:213)
    at com.sun.org.apache.xpath.internal.jaxp.XPathImpl.evaluate(XPathImpl.java:275)
    at WeatherBugAPI.getLiveWeather(WeatherBugAPI.java:36)
    at test.main(test.java:5)
--------------- linked to ------------------
javax.xml.xpath.XPathExpressionException
    at com.sun.org.apache.xpath.internal.jaxp.XPathImpl.evaluate(XPathImpl.java:289)
    at WeatherBugAPI.getLiveWeather(WeatherBugAPI.java:36)
    at test.main(test.java:5)
Caused by: javax.xml.transform.TransformerException: Unable to evaluate expression using this context
    at com.sun.org.apache.xpath.internal.XPath.execute(XPath.java:363)
    at com.sun.org.apache.xpath.internal.jaxp.XPathImpl.eval(XPathImpl.java:213)
    at com.sun.org.apache.xpath.internal.jaxp.XPathImpl.evaluate(XPathImpl.java:275)
    ... 2 more
Caused by: java.lang.RuntimeException: Unable to evaluate expression using this context
    at com.sun.org.apache.xpath.internal.axes.NodeSequence.setRoot(NodeSequence.java:212)
    at com.sun.org.apache.xpath.internal.axes.LocPathIterator.execute(LocPathIterator.java:210)
    at com.sun.org.apache.xpath.internal.XPath.execute(XPath.java:335)
    ... 4 more

您的XPath表達式( //aws:weather )包含未綁定到任何名稱空間URI的名稱空間前綴( aws )。 javax.xml.xpath.XPath的Javadoc中所述,“表達式中的QName將針對通過setNamespaceContext(NamespaceContext nsContext)設置的XPath命名空間上下文進行解析”。 因此,在編譯表達式之前,需要使用setNamespaceContext方法建立名稱空間上下文。

如果您有要解析的XML文檔的架構,則可能要考慮從該架構生成JAXB綁定,這樣您就可以將整個XML文檔變成Java對象圖。

既然您提到Java不是最好的結帳方法,那么這本免費的在線書籍“使用Java處理XML” http://www.ibiblio.org/xml/books/xmljava/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM