4

我想使用 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?

4

2 回答 2

3

当我试图重现你的问题时,我没有得到同样的错误。相反,我会得到一个“NOT_FOUND_ERR:DOM Exception 8”。就我而言,选择器根本不是问题。事实上,返回值t.query是一个数组。如果我想在 a 中使用它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;
  }
}
于 2011-03-26T16:40:41.473 回答
3

"div.recent-transfer>div"是一个有效的查询。KNS 中存在导致间歇性故障的问题。

以下是该函数的使用方式,这样返回的数组就不会产生问题:

rule add_content {
    select when pageview ".*"
    foreach recent() setting (item) {
        append("div#main", item);
    }
}
于 2011-03-30T16:20:55.463 回答