有条件地添加XML属性

时间:2013-05-22 01:39:45

标签: scala

我需要一种方法来有条件地将XML属性“POSITION”添加到XML元素“节点”。目前我正在进行状态检查,然后创建节点。

if (lvl == 2)
      node = <node COLOR={ color } CREATED={ epochTimeMillis } ID={ idGen } POSITION={ position } LINK={ link } MODIFIED={ epochTimeMillis } STYLE="bubble" TEXT={ f.getName() }>
               <edge COLOR={ color } STYLE={ style } WIDTH={ width }/>
             </node>
else
      node = <node COLOR={ color } CREATED={ epochTimeMillis } ID={ idGen } LINK={ link } MODIFIED={ epochTimeMillis } STYLE="bubble" TEXT={ f.getName() }>
               <edge COLOR={ color } STYLE={ style } WIDTH={ width }/>
             </node>
  }

3 个答案:

答案 0 :(得分:2)

使用“null”不是一个好习惯,但在这种情况下它会对你有帮助:

scala> <root ta={ if (true) "true" else null } fa={ if (false) "false" else null } />
res0: scala.xml.Elem = <root ta="true" ></root>

答案 1 :(得分:0)

一种稍微更清洁的方法来做同样的事情@senia建议:

    val posOpt = if (lvl2) Some(myPosition) else None
    val xml = <mydata position={posOpt orNull}/>

答案 2 :(得分:0)

一种方法是在之前创建代码段:

val pos =
  if (lvl == 2) {
    "position = ..."
  } else {
    ""
  }

并始终将其插入结果中。

这可以通过使用带有嵌入式 map 选项和字符串插值进行扩展。

val pos =
  if (lvl == 2) {
    Some(position)
  } else {
    None
  }

pos.map(v => s"position = $v")