Scala XML:测试节点的存在和价值
发布时间:2020-12-16 18:38:03 所属栏目:安全 来源:网络整理
导读:我正在从外部数据存储解析一系列 XML响应.在此期间,我必须测试是否存在子节点,并且 – 如果存在 – 测试其值.为此,我有以下代码: ... val properties = for { val row - root "ResultDescription" val cond:Boolean = checkDetectionNode(row) match { c
我正在从外部数据存储解析一系列
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.截止日期,愚弄我们所有人. 我希望有人可以看看并告诉我是否有什么我做错了(因为我确信有).我试图限制显示的代码,我希望,与问题相关.但是,如果需要任何其他代码,请告诉我. 谢谢 解决方法
xml在这里分散注意力.问题是最后的if(cond)不是作为一个守卫,它只是看起来应该是,编译器认为是一个新的if’then’部分的开始.
在以下示例中: val l = List(1,2,3,4,5) val r = for { i <- l if (i > 2) x <- Some(i * 2) } yield x 如你所料,你会获得List(6,8,10). 运用 val r = for { val i <- l if (i > 2) val x <- Some(i * 2) } yield x 应该给你一个弃用警告,和 val r = for { val i <- l if (i > 2) val x <- Some(i * 2) } yield x 得到 error: illegal start of simple expression val x <- Some(i * 2) 只需移除发电机前面的val(Pattern1′< - 'Expr [Guard]),即可恢复正常服务.如果没有我找到的for循环中的val,它也会更好地流动. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |