2

NodeSeqID で選択するにはどうすればよいですか?

Lift には、 のCssSelectorsようなことができる" " があり、は目的の NodeSeq のみを入力として受け取ります。"#myId" #> functionfunction

しかし、この優れた「cssセレクター」を使用してノードを選択し、後で関数を直接適用するにはどうすればよいですか?

NodeSeq のすべての"id"属性を検索することで実行できることはわかっていますが、Lift のバージョンよりも CPU を消費しませんか? 何か考えや提案はありますか?

4

2 に答える 2

1

を反復処理する方法はいくつかありますNodeSeq

val myNodeSeq = 
  <div>
    <ul>
      <li id="findme"></li>
      <li></li>
    </ul>
  </div>

Scala の XML パーサーを使用して、次のようなことを行うことができます。

myNodeSeq \\ "li" filter(_ \ "@id" contains scala.xml.Text("findme"))

どちらが返されますか:NodeSeq(<li id="findme"></li>)

上記が Lift のバージョンよりも CPU を集中的に使用しているとは思いませんが、lift の CssSelector を使用できない理由もありません。したがって、次のようなものです:

("#findme" #> { ns =>
  //do something with ns - which is the NodeSeq that matches
}).apply(myNodeSeq)

また、再帰とパターン マッチングを使用して何かを解決することもできます。

Lift が実際にマッチングを行う方法に興味がある場合は、ここでCSS セレクターの内容を参照してください。

于 2013-05-14T14:58:49.710 に答える
1

^^ セレクターを使用します (#> の右側は無視されます)。

scala> import net.liftweb.util.Helpers._
import net.liftweb.util.Helpers._

scala> "#id ^^" #> "" apply <test><el id="id"/></test>
res0: scala.xml.NodeSeq = NodeSeq(<el id="id"/>)

パフォーマンスに関しては、明らかに Lift は id 属性自体を繰り返し処理する必要があります。

于 2013-05-17T05:51:42.847 に答える