我正在尝试从常规 XML 结构中提取属性;首先排除缺少特定属性的元素似乎很自然。
我不知道为什么以下方法不起作用(请参阅答案,了解为什么我有过测试 vs. 的想法null
):
val test = <top><el attr="1"></el><el></el><el attr="2"></el></top>
test.child.filter(_ \ "@attr" != null).map(_ \ "@attr")
// ArrayBuffer(1, NodeSeq(), 2)
为什么中间元素仍然存在filter
?
我已经确认它不是运算符优先级:
test.child.filter(x => (x \ "@attr") != null).map(_ \ "@attr")
// ArrayBuffer(1, NodeSeq(), 2)
或者(假设这是内部优化的),我如何在步骤之后NodeSeq()
排除元素?map