我需要的是在一个片段中显示列表的内容。
我有这样的功能:
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
使用解决方案进行探测,但不起作用
答案 0 :(得分:1)
这是因为String
到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这样的东西。
答案 1 :(得分:0)
添加到jcern所说的内容,你最好保留没有<b></b>
的标题。在渲染时,您可以编写
"li" #> data.map(doc => <li><b>{doc.title}</b>: {dot.content}</li> )
alternatevly,甚至更好,你可以像这样使用“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)