1

我使用 scala 内置的 xml 功能来遍历节点,它通常足以满足我的需要。

但是,如何在 scala 中实现这个简单的单行 xpath 查询?

//a[2]/b[2]/c[2]/d

我没有在 scala 中找到一种简单的方法来执行此操作,而无需编写代码来检查每个节点序列是否至少有 2 个项目。

4

1 回答 1

2

我会使用 for 理解来做到这一点。首先,在可选的按索引获取元素中添加一些内容:

implicit class At[T](val s: Seq[T]) extends AnyVal {
  def at(n: Int) = (s drop n).headOption
}

现在,

def findIt(n: xml.Node) = for {
  a2 <- n \\ "a" at 1 // 0-based
  b2 <- a2 \ "b" at 1
  c2 <- b2 \ "c" at 1
} yield c2 \ "d"

利用:

scala> findIt(<root><a/><a><b/><b><c/><c><d>e</d></c></b></a></root>)
res16: Option[scala.xml.NodeSeq] = Some(<d>e</d>)

scala> findIt(<root><a/><a><b/><b><c><d>e</d></c></b></a></root>)
res17: Option[scala.xml.NodeSeq] = None
于 2013-02-14T16:46:12.413 回答