0

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

<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 个选择调用。

任何人都可以将它们放入一个单一的选择表达式中吗?

4

1 回答 1

1

我的猜测是您提出的选择器正是正确的选择器。

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

您必须将列表项包装在列表中,例如<ol>

<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])
于 2017-04-24T13:53:53.213 回答