从可选路径检索Scala XML

时间:2010-05-10 14:04:16

标签: xml scala

我想处理一个文档以检索可能有多个路径的值。理想的签名看起来像是:

def value(doc: Elem, potential_paths: List[something]): String

只需处理查看potential_paths头部的文档,如果找到,则返回它,否则继续使用potential_paths.drop(1)。

使用XPath,“something”将是表示XPath语句的String的简单列表。由于“\”实际上是NodeSeq的一个函数,因此它(显然)不能与节点分开表示。无论如何,scala-ish的方法是什么?

1 个答案:

答案 0 :(得分:4)

假设路径以child/child/child传递,那么您可以执行此操作以进行基本搜索:

def search(doc: NodeSeq, path: String) =
  path.split('/').foldLeft(doc)(_ \ _)

处理整个事情可以这样做:

def value(doc: Elem, potential_paths: List[String]) =
  potential_paths.view.map(search(doc, _)).find(_.nonEmpty)

这假定为Scala 2.8。在Scala 2.7上,将view替换为projection,将_.nonEmpty替换为!_.isEmpty

我在这里使用/作为分隔符,因为它是XPath字符并避免引用问题。请注意,没有前导/<a><b/></a> \ "a"找不到任何内容,因为a不是孩子。