gpt4 book ai didi

html - 如何在 Enlive 中对更复杂的 HTML 片段使用选择器否定(但是...)?

转载 作者:技术小花猫 更新时间:2023-10-29 12:21:22 26 4
gpt4 key购买 nike

我有一个 HTML 片段类似于:

<div id="root">
<div id="A" attrib_2="bar"></div>
<div id="B" attrib_2="baz">
<div id="H" attrib_1="gnu">
<p>
<div id="F" attrib_2="baz"></div>
</p>
</div>
</div>
<div id="C" attrib_2="owl"></div>
<div id="D" attrib_2="uhu"></div>
<div id="E" attrib_2="boom"></div>
</div>

现在,我想选择所有具有 attrib_2 (*[attrb_2]) 的片段,不包括具有 attrib_1 集的节点的后代。可以有更多带有任意标签的嵌套级别(如本例中的 <p>)。使用 Enlive(http://enlive.cgrand.net/),我已经尝试过类似的方法:

(select snippet [(but (attr? :attrib_1)) (attr? :attrib_2)])

但这行不通,因为否定 (but (attr? :attrib_1))也匹配 <p>标签。有没有办法用给定的选择器谓词 ( http://enlive.cgrand.net/syntax.html ) 来表达这一点,还是我必须自己写一个?

提前致谢

-乔臣

最佳答案

您必须编写自己的选择器:

(def parents 
(zip-pred (fn [loc pred]
(some pred (take-while identity (iterate zip/up loc))))))

(未经测试)

然后

(select snippet [[(attr? :attrib_2) (but (parents (attr? :attrib_1))]])

应该可以。

关于html - 如何在 Enlive 中对更复杂的 HTML 片段使用选择器否定(但是...)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7017014/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com