scala - Filtering XML elements with null attributes -
i'm trying extract attributes regular xml structure; seems natural first exclude elements particular attribute missing.
i don't know why following doesn't work (see answer why ever got idea test 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)
why middle element still there after filter
?
i've confirmed it's not operator precedence:
test.child.filter(x => (x \ "@attr") != null).map(_ \ "@attr") // arraybuffer(1, nodeseq(), 2)
alternatively (assuming optimized internally), how exclude nodeseq()
elements after map
step?
just figured out. filter
wasn't return null
, nodeseq()
, following works:
test.child.filter(_ \ "@attr" != scala.xml.nodeseq.empty).map(_ \ "@attr") // arraybuffer(1, 2)
followed this q&a discover how create nodeseq()
object hand
i discovered problem derived crossing own wires. had been using following:
test.child.map(_.attributes("attr")) // arraybuffer(1, null, 2)
which got idea test vs. null
originally. of course, if had stuck that, initial approach have worked:
test.child.filter(_.attributes("attr") != null).map(_ \ "@attr") // arraybuffer(1, 2)
Comments
Post a Comment