Предполагая, что пути передаются как 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
не ребенок.