Scala中如何对XML的Elem元素子节点进行过滤筛选?
优化方案
你可以用下面两种更简洁的写法实现需求:
- 用
filterNot替换原有的filter逻辑
语义上更直白,直接表达「排除标签为msg的元素」的逻辑,不需要写否定判断:
val nonMessages = (n "_").filterNot(_.label == "msg")
- 更推荐用
partition一次性拆分两类节点
你本来就需要同时提取msg和非msg两类集合,用partition只需要遍历一次节点就能得到两个结果,性能更好,代码也更精简:
// 第一个返回值是所有msg元素集合,第二个是所有非msg元素集合 val (messages, nonMessages) = (n "_").partition(_.label == "msg")
如果你用的是Scala标准XML库,写法逻辑也完全一致,只是子节点获取方式调整为child方法即可:
val (messages, nonMessages) = msgGrp.child.partition(_.label == "msg")
内容的提问来源于stack exchange,提问作者Salim Fadhley
相关产品推荐
相关产品推荐

