이것은 처음으로 사이트에 질문을 올리는 것입니다. 저는 며칠 동안이 문제에 대한 해결책을 모색 해 왔으며 거기에 하나가있을 수도 있습니다. 그러나, 나는 나의 질문을 해결하기 위해 아무것도 찾을 수 없었습니다. 그래서 제게 많은 도움이되기를 바랍니다. 또한 나는 자바에서 최고가 아니기 때문에이 질문은 어리석게도 어리석은 짓이 될 수도 있습니다.API 피드 (Java)에서 XML 파싱하기
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