2012-12-20 15 views
11

Czy istnieje sposób, aby umieścić zmienną zostać rozszerzona w sekcji CDATA w ScalaZmienny w CDATA w Scala

val reason = <reason><![CDATA[ {failedReason} ]]></reason> 

Odpowiedz

11

Nie jestem pewien, czy można dostać się, że dzięki natywnej obsłudze XML, ale można zrobić coś takiego:

scala.xml.XML.loadString("<reason><![CDATA[%s]]></reason>".format(failedReason)) 

stracić niektóre walidacji kompilacji w ten sposób, ale powinno dać Ci am xml z elementem danych, które szukasz. Ponieważ zwraca wartość scala.xml.Elem, możesz również osadzić wynik w większej strukturze XML.

EDIT

Po myśleć o tym nieco więcej, co następuje może być beter (i mniej kruche) sposób to zrobić. Ogranicza część tekstu wolnego tylko do CDATA, minimalizując potencjał wyrażeń niezbalansowanych.

<reason>{ scala.xml.Unparsed("<![CDATA[%s]]>".format(failedReason)) }</reason> 
+0

Drugi nieanalizowanych blok działa świetnie! – maxfridbe

23

To może być jeszcze prostsze:

val reason = <reason>{scala.xml.PCData(failedReason)}</reason> 
+1

Możesz chcieć uciec przed nielegalnymi ']]>': 'content.replaceAll ("]]> ","]]]]> ")' –