2010-08-05 6 views
3

J'ai une servlet codée en Scala. J'ai un code comme celui-ci là:Servlets Scala/Java: Comment sortir <dans le code HTML au lieu de <

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

Le code HTML correspondant généré pour value est

Hello &lt;BR/&gt; World 

Comment puis-je obtenir pour générer le code HTML (ci-dessous)?

Hello <BR/> World 

Merci à l'avance

Répondre

7

Si vous ne me dérange pas de changer le type de value à xml.Elem, vous pouvez faire

def value = <xml:group>Hello <BR/> World</xml:group> 

Addition

À mon avis, vous devrait taper autant de XML en ligne que possible. Ce n'est qu'alors que vous aurez la validation du temps de compilation de l'entrée. Toutes les autres solutions vous donnent une exception d'exécution à un moment donné (par exemple, vous avez oublié certains /) ou pourraient même casser votre mise en page XML.

Cependant, si vous voulez vraiment avoir un outil facile transform, vous pouvez le faire:

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" 

puis (pour une raison quelconque, il montre encore la partie <xml:group>, vous pouvez vous en débarrasser avec xml.NodeSeq.fromSeq(value.assumeXML.child) ou similaire)

def message = <HTML><HEAD><TITLE>Test</TITLE></HEAD><BODY>{value.assumeXML}</BODY></HTML> 

ou même (bien, vous auriez pas besoin implicite ici, Unparsed(value) ferait)

def message = <HTML><HEAD><TITLE>Test</TITLE></HEAD><BODY>{value.toUnparsedXML}</BODY></HTML> 

La méthode assumeXML échouera avec lors de l'exécution si vous fournissez un code XML non valide; toUnparsedXML acceptera toutes les entrées, même les données potentiellement dangereuses.

+0

Merci pour la réponse! J'espérais qu'il y avait un moyen plus facile. Cependant, à la fin, le garder comme 'xml.Elem' a plus de sens, bien qu'il ait impliqué un peu de changement de code. – Jus12

Questions connexes