gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 02:05:17 27 4
gpt4 key购买 nike

很遗憾,我需要生成一些困惑的 XML。

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

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

我遇到了两个问题:

首先,CDATA 部分中的任何输出都呈现为转义(例如,大于号 > 变为 >)

有没有办法在 CDATA 部分中禁用转义?

其次,我无法创建 XML 声明。我在尝试包含嵌入式 XML 文档时收到以下异常:

def serializeEmbedded(): Seq[Node] = {
<?xml version="1.0"?>
<bar>
</bar>
}

Exception in thread "main" java.lang.IllegalArgumentException: xml is reserved
at scala.xml.ProcInstr.<init>(ProcInstr.scala:25)

这是我第一次涉足 Scala 的本地 XML 处理。

谢谢,

萨伊什

最佳答案

XML 声明仅与序列化真正相关,您不能使用 Scala 的 XML 文字语法指定它(如您所见)。

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

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>

虽然没有更多语言支持的优雅,但它确实有效。

关于xml - Scala 在 PCDATA 中嵌入嵌套的 XML 文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12268257/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com