Xml 使用YQL从Google的“非官方”天气API中选择特定字段

Xml 使用YQL从Google的“非官方”天气API中选择特定字段,xml,select,yql,google-weather-api,Xml,Select,Yql,Google Weather Api,我可以使用YQL查询选择各个XML字段,在测试时效果很好: SELECT statistics.subscriberCount FROM xml WHERE url='http://gdata.youtube.com/feeds/api/users/{$id}' 然而,当我尝试从中选择单个XML字段时,我总是得到空结果,尽管select*有效 我知道我对XML和YQL的理解并不完整,但我缺少什么 我想问的问题 后果 事实证明,Google weather API并没有什么特别之处,而是关于SE

我可以使用YQL查询选择各个XML字段,在测试时效果很好:

SELECT statistics.subscriberCount FROM xml
WHERE url='http://gdata.youtube.com/feeds/api/users/{$id}'
然而,当我尝试从中选择单个XML字段时,我总是得到空结果,尽管select*有效

我知道我对XML和YQL的理解并不完整,但我缺少什么

我想问的问题 后果
事实证明,Google weather API并没有什么特别之处,而是关于SELECT参数如何与YQL查询中的itemPath参数交互

就我个人而言,我发现YQL文档对于我们这些只对它所依赖的一些技术有初步了解的人来说非常难以使用

似乎当你选择。。。从rss中可以看出,有一个隐含的itemPath指向提要的repeateditem字段。但是当你选择。。。从xml中,您需要手动指定itemPath。如果XML中没有重复的部分,那么将其设置为什么就相当随意了

现在,一旦设置了itemPath,就可以使用点符号选择特定字段。请注意,您可以使用选择点表示法指定子字段,这些子字段是XML属性,但不能使用itemPath中的斜杠表示法指定它们,但诊断无法帮助您找到此类初学者错误

我的新问题 后果
SELECT current_conditions FROM xml
WHERE url="http://www.google.com/ig/api?weather=Tbilisi"
<?xml version="1.0" encoding="UTF-8"?>
<query xmlns:yahoo="http://www.yahooapis.com/v1/base.rng"
    yahoo:count="0" yahoo:created="2012-02-27T11:56:15Z" yahoo:lang="en-US">
    <results/>
</query>
<?xml version="1.0" encoding="UTF-8"?>
<query xmlns:yahoo="http://www.yahooapis.com/v1/base.rng"
    yahoo:count="1" yahoo:created="2012-02-27T11:57:18Z" yahoo:lang="en-US">
    <results>
        <xml_api_reply version="1">
            <weather mobile_row="0" mobile_zipped="1" module_id="0"
                row="0" section="0" tab_id="0">
                <forecast_information>
                    <city data="Tbilisi, Tbilisi"/>
                    <postal_code data="Tbilisi"/>
                    <latitude_e6 data=""/>
                    <longitude_e6 data=""/>
                    <forecast_date data="2012-02-27"/>
                    <current_date_time data="1970-01-01 00:00:00 +0000"/>
                    <unit_system data="US"/>
                </forecast_information>
                <current_conditions>
                    <condition data="Overcast"/>
                    <temp_f data="34"/>
                    <temp_c data="1"/>
                    <humidity data="Humidity: 80%"/>
                    <icon data="/ig/images/weather/cloudy.gif"/>
                    <wind_condition data="Wind: NE at 6 mph"/>
                </current_conditions>
                <forecast_conditions>
                    <day_of_week data="Mon"/>
                    <low data="28"/>
                    <high data="37"/>
                    <icon data="/ig/images/weather/mostly_sunny.gif"/>
                    <condition data="Mostly Sunny"/>
                </forecast_conditions>
                <forecast_conditions>
                    <day_of_week data="Tue"/>
                    <low data="30"/>
                    <high data="41"/>
                    <icon data="/ig/images/weather/mostly_sunny.gif"/>
                    <condition data="Mostly Sunny"/>
                </forecast_conditions>
                <forecast_conditions>
                    <day_of_week data="Wed"/>
                    <low data="30"/>
                    <high data="43"/>
                    <icon data="/ig/images/weather/mostly_sunny.gif"/>
                    <condition data="Mostly Sunny"/>
                </forecast_conditions>
                <forecast_conditions>
                    <day_of_week data="Thu"/>
                    <low data="27"/>
                    <high data="43"/>
                    <icon data="/ig/images/weather/mostly_sunny.gif"/>
                    <condition data="Partly Sunny"/>
                </forecast_conditions>
            </weather>
        </xml_api_reply>
    </results>
</query>
SELECT current_conditions.temp_c.data FROM xml
WHERE url="http://www.google.com/ig/api?weather=Tbilisi"
AND itemPath="//weather"
<?xml version="1.0" encoding="UTF-8"?>
<query xmlns:yahoo="http://www.yahooapis.com/v1/base.rng"
    yahoo:count="1" yahoo:created="2012-03-01T10:22:41Z" yahoo:lang="en-US">
    <results>
        <weather>
            <current_conditions>
                <temp_c data="3"/>
            </current_conditions>
        </weather>
    </results>
</query>