【问题标题】:Clojure, Enlive: how to use negation when using multi-step for selector?Clojure,Enlive:使用多步选择器时如何使用否定?
【发布时间】:2017-07-11 17:08:19
【问题描述】:

我正在为 Clojure 使用 Enlive。我正在尝试在特定的 div 标签内的 li 标签中获取具有类“title”的跨度标签。

<div class="main">
    <li><span class="title">wanted</span></li>
    <li><span class="title">wanted</span></li>
    <li class="dummy"><span class="title">NOT wanted</span></li>
</div>

但是,我想在类名为“dummy”的 li 标签中排除 span 标签。下面的代码按预期工作:

(html/select (html/select src [:div.main]) [[:li (html/but 
:li.dummy)] :span.title])

问题是如何通过一个选择调用来完成这项工作。我无法在多个步骤中使用“但”否定,最终使用嵌套的 2 个选择调用。

任何人都可以将这些放在一个选择表达式中吗?

【问题讨论】:

    标签: clojure selector negation enlive


    【解决方案1】:

    我猜你想出的选择器是正确的。

    它不匹配的原因是您的 HTML 格式不正确——请记住,默认的 TagSoup 解析器会尝试清理您的输入。在您的片段中,您有列表上下文之外的列表项,因此 TagSoup 会提前关闭包装 &lt;div&gt;

    您必须将列表项包装在一个列表中,例如&lt;ol&gt;

    <div class="main">
        <ol>
            <li><span class="title">wanted</span></li>
            <li><span class="title">wanted</span></li>
            <li class="dummy"><span class="title">NOT wanted</span></li>
        </ol>
    </div>
    

    那么下面的选择器应该可以做到:

    (html/select src [:div.main [:li (html/but :.dummy)] :span.title])
    

    【讨论】:

    • HTML 示例错误,实际上存在 ol 标记。您的选择器有效!我尝试了许多使用交叉 [] 括号的变体,但不是您在此处回答的那个。现在我明白了如何在使用否定时使用括号。非常感谢! :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-08
    • 2011-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多