我正在解析来自外部数据存储的一系列 XML 响应。在此期间,我必须测试子节点是否存在,如果存在,则测试它的值。为此,我有以下代码:
...
val properties = for {
val row <- root \\ "ResultDescription"
val cond:Boolean = checkDetectionNode(row) match {
case Some(nodeseq) => {
val txt = nodeseq.text.toLowerCase
if (txt contains "non-detect")
false
else
true
}
case None => true
}
if (cond)
val name = (row \ "CharacteristicName").text
if (charNameList.exists(s => s == name) == false)
} yield {
getObservedProperty(name) match {
case Some(property) => {
charNameList = name :: charNameList
property
}
}
}
...
checkDetectionNode 定义如下:
private def checkDetectionNode(row: scala.xml.NodeSeq) : Option[scala.xml.NodeSeq] = {
if ((row \ "ResultDetectionConditionText") != null)
Some[scala.xml.NodeSeq]((row \ "ResultDetectionConditionText"))
else
None
}
上面的代码在行上导致“非法开始简单表达式”的未指定错误val name...
。老实说,我不是 Scala 程序员,甚至不是函数式程序员(总是更偏向于 OO/命令式)。我只使用 Scala 几天,并且基于我从 Java 和 lambda 运算符中了解的大部分内容。不幸的是,我真的没有时间像我希望的那样坐下来真正学习 Scala。截止日期,愚弄我们所有人。
我希望有人可以看看并让我知道我是否做错了什么(因为我确信有)。我试图将显示的代码限制为我希望与问题相关的代码。但是,如果需要任何其他代码,请告诉我。
谢谢