我有一个用Scala编写的servlet。我在那里有一些这样的代码:
def message = <HTML><HEAD><TITLE>Test</TITLE></HEAD><BODY>{value}</BODY></HTML>
def value = "Hello <BR/> World"
为value
生成的相应HTML代码是
Hello <BR/> World
如何让它生成HTML代码(如下所示)?
Hello <BR/> World
提前致谢
答案 0 :(得分:7)
如果您不介意将value
的类型更改为xml.Elem
,则可以
def value = <xml:group>Hello <BR/> World</xml:group>
<强>加成强>
在我看来,您应该尽可能多地输入XML内联。只有这样,您才能对输入进行编译时验证。所有其他解决方案或者在某些时候给你一个运行时异常(例如,你忘记了一些/
),或者甚至可能破坏你的XML布局。
但是,如果你真的想要轻松转换,你可以这样做:
class XmlString(str: String) {
def assumeXML = xml.XML.loadString("<xml:group>" + str + "</xml:group>")
def toUnparsedXML = new xml.Unparsed(str)
}
implicit def stringToXmlString(str: String) = new XmlString(str)
def value = "Hello <BR/> World"
然后(出于某种原因,它仍会显示<xml:group>
部分;您可以使用xml.NodeSeq.fromSeq(value.assumeXML.child)
或类似内容删除它
def message = <HTML><HEAD><TITLE>Test</TITLE></HEAD><BODY>{value.assumeXML}</BODY></HTML>
甚至(好吧,你不需要隐含在这里,Unparsed(value)
会这样做)
def message = <HTML><HEAD><TITLE>Test</TITLE></HEAD><BODY>{value.toUnparsedXML}</BODY></HTML>
如果提供无效的XML,assumeXML
方法将在运行时失败; toUnparsedXML
将接受所有输入,甚至是有潜在危险的数据。