Scala解析XML时如何匹配获取所有_TimeSeries后缀节点的NodeSeq
实现方法
Scala 标准 XML 库没有原生支持后缀匹配的节点查找语法,你可以用下面两种简便方式实现需求:
1. 直接过滤(无需额外定义)
如果要查找所有层级下名称以_TimeSeries结尾的节点,一行代码即可实现:
val timeSeriesNodes = document \\ "_" filter (_.label.endsWith("_TimeSeries"))
如果只需要查找直接子节点,改成下面的写法:
val timeSeriesNodes = document \ "_" filter (_.label.endsWith("_TimeSeries"))
其中\\ "_" / \ "_" 表示先匹配所有元素节点,再通过_.label.endsWith筛选符合后缀要求的节点,最后返回的结果就是你需要的NodeSeq类型。
2. 自定义扩展方法(实现你要的简洁调用格式)
如果你想实现类似document "*_TimeSeries"的调用形式,可以通过隐式类给NodeSeq扩展自定义方法:
import scala.xml.NodeSeq implicit class XmlSuffixSearchOps(ns: NodeSeq) { // 匹配直接子节点的后缀查找 def \*(suffix: String): NodeSeq = ns \ "_" filter (_.label.endsWith(suffix)) // 匹配所有层级子节点的后缀查找 def \\*(suffix: String): NodeSeq = ns \\ "_" filter (_.label.endsWith(suffix)) }
定义完成后就可以直接按你想要的风格调用:
// 查找所有_TimeSeries结尾的节点 val result = document \\* "_TimeSeries"
内容的提问来源于stack exchange,提问作者K D
相关产品推荐
相关产品推荐

