0

リストの内容をスニペットで表示する必要があります。

私はこのような機能を持っています:

  def generateHtml(data: List[Documents]): NodeSeq = {
    val html = <ul><li></li></ul>
    def  css = "li" #> data.map {
      document =>
        "* *" #>  ( document.title + ": " + document.content )
    }
    css(html)
  }

リスト値には、次のような html コードがあります。

val data: List[Document] = List(Document("<b>title</b> 1", "content 1"),Document("`<b>title</b> 2", "content 2") )

リストの値が表示されるのでうまく機能しますが、問題はhtmlコード(ラベル<b>)を解釈しないことです

私のスニペットでは、次のようなものが表示されます。

<b>title</b> 1: content 1
<b>title</b> 2: content 2

しかし、必要なのはtas bを解釈することです

このようなもの:

タイトル1: コンテンツ 1

タイトル 2 : コンテンツ 2

タグを解釈するために私ができる提案

ここで同様の問題を見つけました: Scala: Parse HTML-fragment

解決策を調べますが、機能しません

4

2 に答える 2

1

これは、デフォルトで文字をエスケープするStringto間の変換があるために発生します。scala.xml.Text文字列を でラップするとscala.xml.Unparsed、探していることが実行されます。

def generateHtml(data: List[Documents]): NodeSeq = {
  val html = <ul><li></li></ul>
  def  css = "li" #> data.map {
    document =>
      "* *" #>  scala.xml.Unparsed( document.title + ": " + document.content )
  }
  css(html)
}

信頼されていないコンテンツ、つまりユーザーが入力する可能性のあるコンテンツを扱うのは良い考えではないことに注意してください。そのような状況では、Markdown や Textile などを使用した方がよいでしょう。

于 2013-07-22T18:36:11.800 に答える
0

jcern が言ったことに加えて、タイトルは<b></b>中身のないものにしておく方がよいでしょう。そして、レンダリング中に、次のように書くことができます

"li" #> data.map(doc => <li><b>{doc.title}</b>: {dot.content}</li> )

代わりに、さらに良いことに、次のような「CSS 変換」を使用できます。

val html = <ul><li> <b class="title">t</b>: <span class="content">c</span> </li></ul>
// (in real-world render method, the html: NodeSeq is taken as a method parameter)

val transformation = "ul *" #> data.map{ doc =>
    ".title *" #> doc.title & 
        ".content" #> doc.content
}

transformation(css)
于 2013-07-23T10:00:41.350 に答える