我希望使用KRL query()来获取嵌套的DIV标记,但它会抱怨
ERROR Rules.pm a8x40 show_xfers Ruleset a8x40 failed: html.query error - Invalid specification ">div" in query: div.recent-transfer>div
这是HTML片段(文件中有多个):
<div class='recent-transfer'>
<span>...</span>
<div> <!-- * * * -->
<div>...</div>
<div>...</div>
</div>
</div>
这是我的功能:
recent = function() {
t = http:get(the_url).pick("$..content");
t.query("div.recent-transfer>div")
}
我想选择标有* * *
的DIV。我是否需要链接几个query()语句来获取DIV?
答案 0 :(得分:3)
当我尝试重现您的问题时,我没有得到同样的错误。相反,我会得到一个“NOT_FOUND_ERR:DOM例外8”。在我的情况下,选择器根本不是问题;事实上t.query
的返回值是一个数组。如果我想在notify()
中使用它,我必须从数组中取出第0个元素并返回它。
我不知道你遇到的问题是否相同。但这是一个适合我的示例规则集:
ruleset a163x61 {
meta {
name "Selector test"
description <<
Testing the query() function
>>
author "Steve Nay"
logging on
}
dispatch {
}
global {
the_url = "http://students.cs.byu.edu/~snay2/content.html";
recent = function() {
t = http:get(the_url).pick("$..content");
// This produces an array.
text = t.query("div.recent-transfer>div");
// We want the text out of the element. Get the first element.
text[0];
// This won't work; throws a "NOT_FOUND_ERR: DOM Exception 8"
//text;
};
}
rule first_rule {
select when pageview ".*" setting ()
pre {
disp = recent();
}
notify("Content:", disp) with sticky=true;
}
}
答案 1 :(得分:3)
"div.recent-transfer>div"
是有效查询。 KNS出现问题导致间歇性故障。
以下是函数的使用方法,以便返回的数组不会产生问题:
rule add_content {
select when pageview ".*"
foreach recent() setting (item) {
append("div#main", item);
}
}