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

String发生这种情况是因为to之间存在转换scala.xml.Text,默认情况下会转义字符。如果您将 String 包装在 中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 回答