对于这样的XML代码段:
val fruits =
<fruits>
<fruit>
<name>apple</name>
<taste>red</taste>
</fruit>
<fruit>
<name>banana</name>
<taste>yellow</taste>
</fruit>
<fruit>
<name>banana</name>
<taste>green</taste>
</fruit>
<fruit>
<name>apple</name>
<taste>green</taste>
</fruit>
</fruits>
做类似的事情:
fruits \\ "fruit"
将返回类型scala.xml.NodeSeq
的序列,其中包含所有水果和子节点。
如何限制此序列仅包含内部带有'banana'的水果元素。即,我希望结果是:
<fruits>
<fruit>
<name>banana</name>
<taste>yellow</taste>
</fruit>
<fruit>
<name>banana</name>
<taste>green</taste>
</fruit>
<fruits>
答案 0 :(得分:4)
(fruits \\ "fruit").filter(x => // filter the sequence of fruits
(x \\ "name") // find name nodes
.flatMap(_.child.map(_.text)) // get all name node text values
.contains("banana")) // see which name nodes contain "banana"
返回NodeSeq
:
<fruit>
<name>banana</name>
<taste>yellow</taste>
</fruit>
<fruit>
<name>banana</name>
<taste>green</taste>
</fruit>