首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用Scala返回空节点?

如何使用Scala返回空节点?
EN

Stack Overflow用户
提问于 2016-04-27 16:55:35
回答 2查看 1.4K关注 0票数 2

请注意,此问题与返回0或1个元素(节点或Elem)有严格关系。请不要认为NodeSeq.Empty是一种解决方案,因为它已经适用于返回NodeSeq类型(0或多个元素)的函数,就像在上解决的那样

我正在使用不同的函数构建XML,如下面的示例:

代码语言:javascript
运行
复制
<xml>
  { maybeXmlNode(param) }
</xml>

并试图根据param的值返回空或非空节点(或Elem),例如:

代码语言:javascript
运行
复制
def maybeXmlNode(param: Boolean): NodeOrElem = {
  if(param) <someXml></someXml>
  else ??? //Empty or None doesn't work
}

我现在使用的解决方案只是将函数类型定义为OptionElem,然后使用它作为maybeXml.getOrElse(""),但这对我来说没有多大意义。我目前的用法如下:

代码语言:javascript
运行
复制
<xml>
  { maybeXmlNode(param).getOrElse("") }
</xml>

def maybeXmlNode(param: Boolean): Option[Elem] = {
  if(param) Some(<someXml></someXml>)
  else None
}

是否有更好的方法来表达这一点,可能是直接使用空节点或Elem?

EN

回答 2

Stack Overflow用户

发布于 2018-06-27 00:42:16

多年后,我一直在寻找同样的东西。似乎不存在真正的解决方案。

不过,我还是用xml.Text("")黑了它(Unparsed("")类似,但有时打印得很有趣)。

示例:

代码语言:javascript
运行
复制
val pretty = new PrettyPrinter(100, 2)
println(pretty.format(
  <elem attrib={Text("")}>
    {Text("")}
    <withtag thing="thang">
      boop
    </withtag>
    {"something"}
  </elem>
))

输出

代码语言:javascript
运行
复制
<elem attrib="">
  <withtag thing="thang"> boop </withtag>
  something
</elem>

然而,这可能会导致一些不明显的行为,例如

代码语言:javascript
运行
复制
def wrap(node: Node) = <wrapped>{node}</wrapped>

(很难说是否应该期待另一个“空”节点返回,或者一个没有子元素的包装元素)。它也不适用于xml.Utility.trim

票数 1
EN

Stack Overflow用户

发布于 2016-11-23 23:35:13

试一试

代码语言:javascript
运行
复制
<xml>{maybeXmlNode(param).getOrElse(new NodeBuffer())}</xml>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36896156

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档