これは初めての質問です。私は数日間このための解決策を探しており、そこに1つがあるかもしれません。しかし、私は私の質問を解決するために何かを見つけることができていないので、私はたくさんのあなたが私を助けることができることを望んでいます。また、私はJavaで最高ではないので、この質問はばかげてばかげてしまうかもしれません。APIフィードからXMLを解析する(Java)
urlからweather 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クラスには、さまざまな属性すべてについて以下のような文章があります。 (。それらのトンをTheresの)
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
私はおそらく必要になる場合があります任意の情報を含めることを試みました。アドバイスをいただきありがとうございます。この質問には既にお答えいただきまして申し訳ありません。
返されたXMLをキャプチャし、XMLエディタに読み込んでXPath式を実行し、XPath式ではなくJavaが問題であることを確認できるように、XPath式が動作することをテストしましたか? – ams