2017-04-24 26 views
0

我使用Enlive for Clojure。我試圖在特定的div標籤內使用li標籤中的class「title」來獲取span標籤。Clojure,Enlive:如何在使用多步選擇器時使用否定?

<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]) 

問題是如何使這項工作只有一個選擇呼叫。我無法使用'but'否定,並且最終使用了嵌套的2個select調用。

任何人都可以把這些放入一個單一的選擇表達?

回答

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]) 
+0

的HTML例子是錯誤的,OL標籤實際上是有。你的選擇器工作!我用交叉[]括號嘗試了很多變體,但不是你在這裏回答的那個。現在我知道如何在使用否定時使用括號。非常感謝! :) – gini09

相關問題