2016-04-27 64 views
2

我建立使用不同的功能块的XML,如下面的例子:如何使用Scala XML返回空NodeSeq?

<xml> 
    { maybeXml(param) } 
</xml> 

,并试图基于帕拉姆的值,如返回一个空或非空NodeSeq:

def maybeXml(param: Boolean): NodeSeq = { 
    if(param) <someXml></someXml> 
    else ??? //Empty or None doesn't work 
} 

我现在使用的解决方案只是将函数类型定义为Option [NodeSeq],然后将其用作maybeXml.getOrElse(“”),但这对我没有多大意义。我当前的用法如下:

<xml> 
    { maybeXml(param).getOrElse("") } 
</xml> 

def maybeXml(param: Boolean): NodeSeq = { 
    if(param) Some(<someXml></someXml>) 
    else None 
} 

是一种更好的方式来直接使用Empty NodeSeq来表示它吗?

回答

2

为空NodeSeq使用NodeSeq.Empty

def maybeXml(param: Boolean): NodeSeq = { 
    if(param) <someXml></someXml> 
    else NodeSeq.Empty 
} 
+0

谢谢,这样做的工作类型NodeSeq的功能。但是,我也有一个函数只返回一个节点的情况。我如何处理这种情况的任何想法? – chaotive

+0

好吧,也许有一个更好的解决方案,但'Elem'是'Node'和'Node'是'NodeSeq',所以你可以创建一个函数返回'NodeSeq'像这样'def get(p:Boolean):NodeSeq =如果(p) else NodeSeq.Empty' –

+0

不,这个问题是它迫使我改变严格返回0或1节点(节点类型)的东西的类型,到0到许多节点的可能序列(NodeSeq类型)。我的功能需要正确描述可能的结果。我已经为该主题思想创建了[另一个问题](http://stackoverflow.com/questions/36896156/how-to-return-empty-node-using-scala-xml)。 – chaotive