Scala在PCDATA中嵌入嵌套的XML文档
遗憾的是,我需要生成一些混乱的XML 主文档必须包含嵌入的XML文档。但是,嵌入的文档出现在CDATA节中。最终结果应如下所示: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 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处理
谢谢,
SaishXML声明只与序列化相关,不能使用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从方法返回。非常感谢你!