请注意,此问题与返回0或1个元素(节点或Elem)有严格关系。请不要认为NodeSeq.Empty是一种解决方案,因为它已经适用于返回NodeSeq类型(0或多个元素)的函数,就像在上解决的那样
我正在使用不同的函数构建XML,如下面的示例:
<xml>
{ maybeXmlNode(param) }
</xml>
并试图根据param的值返回空或非空节点(或Elem),例如:
def maybeXmlNode(param: Boolean): NodeOrElem = {
if(param) <someXml></someXml>
else ??? //Empty or None doesn't work
}
我现在使用的解决方案只是将函数类型定义为OptionElem,然后使用它作为maybeXml.getOrElse(""),但这对我来说没有多大意义。我目前的用法如下:
<xml>
{ maybeXmlNode(param).getOrElse("") }
</xml>
def maybeXmlNode(param: Boolean): Option[Elem] = {
if(param) Some(<someXml></someXml>)
else None
}
是否有更好的方法来表达这一点,可能是直接使用空节点或Elem?
发布于 2018-06-27 00:42:16
多年后,我一直在寻找同样的东西。似乎不存在真正的解决方案。
不过,我还是用xml.Text("")
黑了它(Unparsed("")
类似,但有时打印得很有趣)。
示例:
val pretty = new PrettyPrinter(100, 2)
println(pretty.format(
<elem attrib={Text("")}>
{Text("")}
<withtag thing="thang">
boop
</withtag>
{"something"}
</elem>
))
输出
<elem attrib="">
<withtag thing="thang"> boop </withtag>
something
</elem>
然而,这可能会导致一些不明显的行为,例如
def wrap(node: Node) = <wrapped>{node}</wrapped>
(很难说是否应该期待另一个“空”节点返回,或者一个没有子元素的包装元素)。它也不适用于xml.Utility.trim
。
发布于 2016-11-23 23:35:13
试一试
<xml>{maybeXmlNode(param).getOrElse(new NodeBuffer())}</xml>
https://stackoverflow.com/questions/36896156
复制相似问题