我希望将自己的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
})
为了避免雅虎向服务器发出请求。 关于如何做到这一点的任何想法?感谢。
答案 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
})
<强>链接强>