gpt4 book ai didi

xml - 方法返回 NodeBuffer 而不是 Elem,这违反了类型检查规则

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

有2个方法,都返回xml:

 def method1 = 
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope>
<soap:Header>
{Elem(....)}
</soap:Header>
</soap:Envelope>

def method2 =
<someXml>
//.......
</someXml>

还有一种获取 Elem 的方法:

def method3(a: Elem) = //....

val xml1 = method1
val xml2 = method2

method3(xml1) //error
method3(xml2) //ok

它说 method1 返回 NodeBuffer 并且它不能接受它,而 method2 返回 Elem 那是非常好。

这是为什么呢?我该怎么办?

最佳答案

scala> def method1 = <?xml version="1.0" encoding="utf-8"?><root />
method1: scala.xml.NodeBuffer

method1 中,您尝试创建的不是带有 XML 声明xml,而是 2 个 Node : Processing instruction (scala 类型 ProcInstr )和 Elem:

scala> <?abc attr1="v1" attr2="v2" ?>
res0: scala.xml.ProcInstr = <?abc attr1="v1" attr2="v2" ?>

2 次点头的顺序为您提供了一组节点 - NodeBuffer:

scala> <a/><b/>
res0: scala.xml.NodeBuffer = ArrayBuffer(<a/>, <b/>)

实际上你不能手动使用处理指令xml:

scala> <?xml version="1.0" encoding="utf-8"?>
java.lang.IllegalArgumentException: xml is reserved

只需删除它。

如果您需要序列化版本中的 XML 声明,您应该使用 XML.writeXML.savexmlDecl = true:

import xml.XML
val myXml = <root />
val writer = new java.io.StringWriter
XML.write(writer, myXml, "utf-8", xmlDecl = true, doctype = null)
writer.toString
// <?xml version='1.0' encoding='utf-8'?>
// <root/>

关于xml - 方法返回 NodeBuffer 而不是 Elem,这违反了类型检查规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20795492/

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