我正在使用Enlive进行Clojure。我正在尝试在特定div标签内的li标签内获取带有“title”类的span标签。
<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>
但是,我想在li标签中排除具有类名“dummy”的span标签。下面的代码按预期工作:
(html/select (html/select src [:div.main]) [[:li (html/but
:li.dummy)] :span.title])
问题是如何通过一次选择调用来完成这项工作。我无法通过多个步骤使用“但是”否定,最终使用嵌套的2个选择调用。
任何人都可以把它们放在一个单一的选择表达式中吗?
答案 0 :(得分: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])