YQL从xml中选择

时间:2011-08-15 19:20:51

标签: xml xpath yql

我正在使用YQL控制台运行以下查询:

 select * 
   from xml 
  where url="http://www.inova.org/patient-and-visitor-information/facilities/inova-fair-oaks-hospital/plan-your-visit/index.jsp" 
        and itemPath="html.body.form"

未返回任何结果。我也试过使用xpathcss只是为了咧嘴笑,但我没有得到任何结果。如果我删除第二个过滤器,我会得到页面标记。难道我做错了什么?它是一个XHTML页面(根据文档类型),因此select * from html不起作用。

感谢。

更新

我已将查询语法更新为一个似乎至少返回结果的查询,但我需要深入了解。我真正需要的是这样的事情:

 select * 
   from xml 
  where url="http://www.inova.org/patient-and-visitor-information/facilities/inova-fair-oaks-hospital/plan-your-visit/index.jsp" 
        and itemPath="html.body.form.div#wrapper.div#page.div#content"

不幸的是,用于通过id访问特定div的语法不起作用,我没有找到任何方法来到达那个返回任何结果的目标div(id="content")。

更新

我偶然发现了,我的意思是偶然发现到一个有效的YQL查询中(目前,让我们忽略它的脆弱程度):

 select * 
   from xml 
  where url="http://www.inova.org/patient-and-visitor-information/facilities/inova-fair-oaks-hospital/plan-your-visit/index.jsp" 
        and itemPath="html.body.form.div.1.div.4.div.2"

任何有关如何使其不那么脆弱(并且理想地防弹)的建议都会非常非常感激。

1 个答案:

答案 0 :(得分:0)

我认为这可能与编写xhtml的方式有关,而不是实际的YQL语句。

Firefox尝试直接访问YQL语句时抛出此错误:

XML Parsing Error: undefined entity
Location:http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20xml%20where%20url%3D%27http%3A%2F%2Fwww.inova.org%2Fpatient-and-visitor-information%2Ffacilities%2Finova-fair-oaks-hospital%2Fplan-your-visit%2Findex.jsp%27
Line Number 307, Column 12:

Fairfax, VA&nbsp; 22033<br/>
-----------^

如果您正在使用jQuery,可以使用以下内容来解决这个问题:

$.ajax({
    type : 'GET',
    dataType : 'xml',
    url : 'http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20xml%20where%20url%3D%22http%3A%2F%2Fwww.inova.org%2Fpatient-and-visitor-information%2Ffacilities%2Finova-fair-oaks-hospital%2Fplan-your-visit%2Findex.jsp%22',
    success : function(xhtml) {
        //find all nodes
        $(xhtml).find('h1').each(function(){
            console.log($(this).html())
        });

        //target specific node
        console.log($('#content').html())
    }
})