1
我使用xml功能中構建的scala遍歷節點,它通常足以滿足我的需求。通過名稱/位置遍歷XML節點而不需要檢查邊界
但是,如何才能在scala中實現這個簡單的單行xpath查詢?
//a[2]/b[2]/c[2]/d
我沒有找到一個簡單的方法來做到這一點在Scala中, 無需編寫代碼,以檢查至少有2項爲每個節點序列。
我使用xml功能中構建的scala遍歷節點,它通常足以滿足我的需求。通過名稱/位置遍歷XML節點而不需要檢查邊界
但是,如何才能在scala中實現這個簡單的單行xpath查詢?
//a[2]/b[2]/c[2]/d
我沒有找到一個簡單的方法來做到這一點在Scala中, 無需編寫代碼,以檢查至少有2項爲每個節點序列。
我會用理解來做到這一點。首先,添加了一些可選指標得到一個元素:
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-14 16:28:44