Scala XML解析与Xpath
问题描述:
我想解析Scala中的XML使用scala.xml.XML,我想避免必须通过XPath传递字符串到XML Elem才能获得NodeSeq。Scala XML解析与Xpath
必须在多个地方指定像elem \\ "tag1" \\ "tag2" \\ "@tagN"
这样的字符串似乎很脆弱且重复。
大部分的Scala XML解析教程都解析XPath硬编码字符串jank - elem \\ "tag1" \\ "tag2" \\ "@tagN"
- 无处不在。
是否有可能编写一个方法,通过XPath通过Seq [String]搜索Elem并返回一个NodeSeq?
的方法看起来是这样的:
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>)
这比我想的方法更清洁。 我试图使用递归传递Seq的NodeSeq +尾部,当seq.length为1时,返回最终的NodeSeq。 我试图使用集合内置插件,但从来没有想过使用foldLeft。感谢你的分享! – Anthony 2015-03-08 21:09:00