为YQL查询传递Raw XML

时间:2017-08-13 22:53:11

标签: json xml yql

我希望将自己的xml传递给YQL以解析为JSON,而不是让Yahoo的服务器查询我提供的URL来获取XML。

当前请求,Yahoo查询我提供的页面以获取JSON响应:

queue_request({
    dataType: 'jsonp',
    url: 'https://query.yahooapis.com/v1/public/yql',
    data: {
        q: 'select * from xml where url="' + url + '"',
        format: 'json'
    },
    complete: callback
})

我想按照(伪代码)的方式做一些事情:

queue_request({
    dataType: 'jsonp',
    url: 'https://query.yahooapis.com/v1/public/yql',
    data: {
        q: 'select * from xml where xmlstring="' + xml + '"',
        format: 'json'
    },
    complete: callback
})

为了避免雅虎向服务器发出请求。 关于如何做到这一点的任何想法?感谢。

1 个答案:

答案 0 :(得分:0)

我认为不可能使用内置的YQL表(例如xml)。 但是,可能需要使用custom Open Data Table

自定义数据表

您可以创建自定义表并使用<execute> block to execute some JavaScript来解析查询中提供的XML字符串,并将生成的XML对象作为查询的结果。

...
<select itemPath="" produces="XML">
  <inputs>
    <key id="xmlstring" type="xs:string" paramType="variable" required="true"/>
  </inputs>
  <execute><![CDATA[
    response.object = new XML(xmlstring);
  ]]></execute>
</select>
...

»请参阅the full example data table

示例查询

现在有一个自定义表格,我们可以在查询中use

use "https://raw.githubusercontent.com/salathe/yql-tables/examples/data/xmlstringarg.xml" as xml;
select * from xml where xmlstring="<example><a>A</a><b>B</b></example>";

»请参阅this query in the YQL console

您的代码示例

实际上,只有查询本身已更改为包含use语句。

var query = 'use "https://raw.githubusercontent.com/salathe/yql-tables/examples/data/xmlstringarg.xml" as xml;'
          + 'select * from xml where xmlstring="' + xml + '"';
queue_request({
    dataType: 'jsonp',
    url: 'https://query.yahooapis.com/v1/public/yql',
    data: {
        q: query,
        format: 'json'
    },
    complete: callback
})

<强>链接