Scala XML 使用 Xpath 解析
Scala XML parsing with Xpath
我正在尝试使用 scala.xml.XML 在 Scala 中解析 XML 并且我想避免必须通过 XPath 将字符串传递给 XML Elem 以获得 NodeSeq .
必须在多个地方指定像 elem \ "tag1" \ "tag2" \ "@tagN"
这样的字符串,这看起来很脆弱且重复。
大多数 Scala XML 解析教程都让您使用 XPath 硬编码字符串解析 jank - elem \ "tag1" \ "tag2" \ "@tagN"
- 无处不在。
是否可以编写一种方法,通过 XPath 和 returns NodeSeq 通过 Seq[String] 搜索 Elem?
该方法类似于:
def getNodeFromXml(elem: Elem, tags: Seq[String]): NodeSeq = {
Returns a NodeSeq elem \ tags(0) \ tags(1) \ ... \ tags(tags.length)
}
谢谢
类似于:
scala> import xml._
import xml._
scala> val x = <top><middle><bottom>text</bottom></middle></top>
x: scala.xml.Elem = <top><middle><bottom>text</bottom></middle></top>
scala> val names = Seq("middle","bottom")
names: Seq[String] = List(middle, bottom)
scala> val ns: NodeSeq = x
ns: scala.xml.NodeSeq = <top><middle><bottom>text</bottom></middle></top>
scala> names.foldLeft(ns)((e,s) => e \ s)
res2: scala.xml.NodeSeq = NodeSeq(<bottom>text</bottom>)
我正在尝试使用 scala.xml.XML 在 Scala 中解析 XML 并且我想避免必须通过 XPath 将字符串传递给 XML Elem 以获得 NodeSeq .
必须在多个地方指定像 elem \ "tag1" \ "tag2" \ "@tagN"
这样的字符串,这看起来很脆弱且重复。
大多数 Scala XML 解析教程都让您使用 XPath 硬编码字符串解析 jank - elem \ "tag1" \ "tag2" \ "@tagN"
- 无处不在。
是否可以编写一种方法,通过 XPath 和 returns NodeSeq 通过 Seq[String] 搜索 Elem?
该方法类似于:
def getNodeFromXml(elem: Elem, tags: Seq[String]): NodeSeq = {
Returns a NodeSeq elem \ tags(0) \ tags(1) \ ... \ tags(tags.length)
}
谢谢
类似于:
scala> import xml._
import xml._
scala> val x = <top><middle><bottom>text</bottom></middle></top>
x: scala.xml.Elem = <top><middle><bottom>text</bottom></middle></top>
scala> val names = Seq("middle","bottom")
names: Seq[String] = List(middle, bottom)
scala> val ns: NodeSeq = x
ns: scala.xml.NodeSeq = <top><middle><bottom>text</bottom></middle></top>
scala> names.foldLeft(ns)((e,s) => e \ s)
res2: scala.xml.NodeSeq = NodeSeq(<bottom>text</bottom>)