我正在尝试在Kynetx应用程序中使用Yahoo Local Search。
ruleset avogadro {
meta {
name "yahoo-local-ruleset"
description "use results from Yahoo local search"
author "randall bohn"
key yahoo_local "get-your-own-key"
}
dispatch { domain "example.com"}
global {
datasource local:XML <- "http://local.yahooapis.com/LocalSearchService/V3/localsearch";
}
rule add_list {
select when pageview ".*" setting ()
pre {
ds = datasource:local("?appid=#{keys:yahoo_local()}&query=pizza&zip=#{zip}&results=5");
rs = ds.pick("$..Result");
}
append("body","<ul id='my_list'></ul>");
always {
set ent:pizza rs;
}
}
rule add_results {
select when pageview ".*" setting ()
foreach ent:pizza setting pizza
pre {
title = pizza.pick("$..Title");
}
append("#my_list", "<li>#{title}</li>");
}
}
我最终得到的清单是
. [object Object]
和'title'有
{'$t' => 'Pizza Shop 1'}
我无法弄清楚如何获得标题。看起来原始XML文件中的“文本内容”变成{'$ t'=&gt; 'text content'}和'$ t'给pick()带来了问题。
答案 0 :(得分:4)
当XML数据源和数据集转换为JSON时,XML节点中的文本值将分配给$ t。您可以通过将前块中的pick语句更改为
来选择标题文本title = pizza.pick("$..Title.$t");
试一试,看看是否能解决您的问题。
关于与您的问题无关的事项的附注:
1)感谢您分享整个规则集,您遇到了什么问题以及您的期望。让你更容易回答你的问题。
2)不应该从AppBuilder或命令行gem为您生成的规则集标识符进行更改。您当前的标识符
ruleset avogadro {
应该看起来更像
规则集a60x304 {
3)你不需要
setting ()
在select语句中,除非正则表达式中有一个捕获组
答案 1 :(得分:3)
事实证明,pick(“$ .. Title。$ t”)确实有效。看起来很有趣,但它确实有效。我觉得不像小丑帽那么有趣。
name = pizza.pick("$..Title.$t");
city = pizza.pick("$..City.$t");
phone = pizza.pick("$..Phone.$t");
list_item = "<li>#{name}/#{city} #{phone}</li>"
希望我现在有一些披萨!