我正在使用AS3和Flash CC。我正在尝试构建一个简单的天气小部件,但我似乎无法解析来自Yahoo Weather API的任何XML数据。加载XML数据,当我跟踪整个XML数据时,您可以在输出中看到它。
以下是我在fla文件的第1帧动作脚本中使用的代码:
var myXML: XML = new XML();
var XML_URL: String = "https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20weather.forecast%20where%20woeid%20in%20(select%20woeid%20from%20geo.places(1)%20where%20text%3D%22nome%2C%20ak%22)&format=xml&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys";
var myXMLURL: URLRequest = new URLRequest(XML_URL);
var myLoader: URLLoader = new URLLoader(myXMLURL);
myLoader.addEventListener(Event.COMPLETE, xmlLoaded);
function xmlLoaded(event: Event): void {
myXML = XML(myLoader.data);
trace("Data loaded.");
var yweather:Namespace = new Namespace("http://xml.weather.yahoo.com/ns/rss/1.0");
trace(myXML); //successfully shows entire XML data
trace(myXML.query.results.channel.description); //unsuccessful
trace(myXML.channel.item.yweather::condition.@temp + " °F"); //only shows °F
}
有谁知道为什么我无法返回像温度这样的特定XML数据?提前谢谢!
注意:我使用this tutorial作为基础。
答案 0 :(得分:1)
唉。它就像根据教程错误地移动数据一样简单,因为我的xml以不同的结果级别出现。如果有人遇到此问题,则需要忽略XML数据的根级别。在我的情况下,你忽略“查询”并从“结果”开始:
不正确:
不成功,因为我包含了查询
trace(myXML.query.results.channel.description);
不成功,因为我没有包含结果
trace(myXML.channel.item.yweather::condition.@temp + " °F");
修正:
trace(myXML.results.channel.description);
trace(myXML.results.channel.item.yweather::condition.@temp + " °F");
或者,我可以使用网址:http://weather.yahooapis.com/forecastrss?w=2460286,我从temp教程中获取的原始代码也可以使用:
trace(myXML.channel.item.yweather::condition.@temp + " °F");
描述代码也适用于频道级别:
trace(myXML.channel.description);
希望这可以帮助任何人解决这个问题!