Scala在PCDATA中嵌入嵌套的XML文档

Scala在PCDATA中嵌入嵌套的XML文档,xml,scala,Xml,Scala,遗憾的是,我需要生成一些混乱的XML 主文档必须包含嵌入的XML文档。但是,嵌入的文档出现在CDATA节中。最终结果应如下所示: <?xml version="1.0"?> <foo> <xml> <![CDATA[ <?xml version="1.0" encoding="UTF-8"?> <bar> </bar> ]]> </xml>

遗憾的是,我需要生成一些混乱的XML

主文档必须包含嵌入的XML文档。但是,嵌入的文档出现在CDATA节中。最终结果应如下所示:

<?xml version="1.0"?>
<foo>
  <xml>
    <![CDATA[
      <?xml version="1.0" encoding="UTF-8"?>
      <bar>
      </bar>
    ]]>
  </xml>
</foo>
import scala.xml._

def toCData(doc: Elem) = {
  val w = new java.io.StringWriter
  XML.write(w, doc, "UTF-8", true, null)
  PCData(w.toString)
}
这是我第一次尝试Scala的原生XML处理

谢谢,


Saish

XML声明只与序列化相关,不能使用Scala的XML文本语法(如您所发现的)来指定它

我建议像这样定义一个助手函数:

<?xml version="1.0"?>
<foo>
  <xml>
    <![CDATA[
      <?xml version="1.0" encoding="UTF-8"?>
      <bar>
      </bar>
    ]]>
  </xml>
</foo>
import scala.xml._

def toCData(doc: Elem) = {
  val w = new java.io.StringWriter
  XML.write(w, doc, "UTF-8", true, null)
  PCData(w.toString)
}
现在您可以编写,例如:

scala> val doc = <outer>{ toCData(<inner/>) }</outer>
doc: scala.xml.Elem = 
<outer><![CDATA[<?xml version='1.0' encoding='UTF-8'?>
<inner></inner>]]></outer>
scala>val doc={toCData()}
doc:scala.xml.Elem=
]]>

有了多一点语言支持,它就没有那么优雅了,但它很管用。

我今天早上醒来时想,“我将把这个该死的东西序列化为一个单独的文档,并将它作为一个字符串包含进去。”您的解决方案非常管用。缺少的步骤是使用包装好的PCData从方法返回。非常感谢你!