我正在解析來自外部數據存儲的一系列XML響應。在此期間,我必須測試一個子節點的存在,並且 - 如果它存在 - 測試它的值。爲了實現這一點,我有以下代碼:Scala 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,就像我希望的那樣。截止日期,讓我們所有的傻瓜。
我希望有人可以看看,讓我知道是否有什麼我做錯了(我確信有)。我試圖限制所顯示的代碼,我希望與這個問題相關。但是,請讓我知道是否需要額外的代碼。
謝謝
我想我應該說清楚以上是語句理解的一部分。 'if(cond)'假定是用於確定yield塊的執行。我編輯了我的答案,詳細說明了代碼。 – Cowan