2010-08-05 25 views
3

我有一個在Scala中編碼的servlet。我有一些像這樣的代碼有:Scala/Java servlets:如何在HTML代碼中輸出<而不是<

def message = <HTML><HEAD><TITLE>Test</TITLE></HEAD><BODY>{value}</BODY></HTML> 
def value = "Hello <BR/> World" 

value產生相應的HTML代碼

Hello &lt;BR/&gt; World 

我如何得到它生成的HTML代碼(如下圖所示)?

Hello <BR/> World 

在此先感謝

回答

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將接受所有輸入,甚至是有潛在危險的數據。

+0

感謝您的回答!我希望有一個更簡單的方法。然而,最後,將它保留爲'xml.Elem'更有意義,儘管它涉及到一些代碼更改。 – Jus12 2010-08-06 08:21:27

相關問題