Scala中的CDATA变量

max*_*dbe 13 scala cdata scala-xml

有没有办法在scala的cdata部分中放置一个变量

val reason = <reason><![CDATA[ {failedReason} ]]></reason>
Run Code Online (Sandbox Code Playgroud)

Bob*_*b G 27

它可能更简单:

val reason = <reason>{scala.xml.PCData(failedReason)}</reason>
Run Code Online (Sandbox Code Playgroud)


jce*_*ern 13

我不确定你是否可以通过原生XML支持获得它,但你可以做类似的事情:

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

你以这种方式丢失了一些编译时验证,但它应该给你xml元素和你正在寻找的数据.由于它返回a scala.xml.Elem,您还可以将结果嵌入到更大的XML结构中.

编辑

在考虑了这一点之后,以下可能是一种更好(并且不那么脆弱)的方式.它将自由文本部分限制为仅限CDATA,从而最大限度地减少了不平衡表达式的可能性.

<reason>{ scala.xml.Unparsed("<![CDATA[%s]]>".format(failedReason)) }</reason> 
Run Code Online (Sandbox Code Playgroud)