Estoy analizando una serie de respuestas XML desde un almacén de datos externo. Durante el cual debo probar la existencia de un nodo hijo y, si existe, probar su valor. Para lograr que tengo el siguiente código:Scala XML: prueba de la existencia y el valor del nodo
...
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 se define como tal:
private def checkDetectionNode(row: scala.xml.NodeSeq) : Option[scala.xml.NodeSeq] = {
if ((row \ "ResultDetectionConditionText") != null)
Some[scala.xml.NodeSeq]((row \ "ResultDetectionConditionText"))
else
None
}
Los anteriores resultados de código en un error no especificado de "inicio ilegal de expresión simple" en la línea val name...
. Para ser sincero, no soy un programador de Scala o incluso un programador funcional (siempre fue más parcial con OO/imperativo). Solo he estado usando Scala por unos días y he estado basando la mayor parte de lo que sé de los operadores Java y lambda. Desafortunadamente, realmente no tengo tiempo para sentarme y realmente aprender a Scala como desearía. Plazos, nos hacen el tonto a todos.
Espero que alguien pueda echar un vistazo y decirme si hay algo que estoy haciendo mal (como estoy seguro de que hay). Traté de limitar el código mostrado, lo que espero, sea relevante para la pregunta. Sin embargo, avíseme si se necesita algún código adicional.
Gracias
Supongo que debería dejar en claro que lo anterior es parte de una declaración de comprensión. El 'if (cond)' se supone que es para determinar la ejecución del bloque de rendimiento. He editado mi respuesta para elaborar más sobre el código. – Cowan