3

对于这样的 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将返回一个包含所有水果和子节点的类型序列。

如何将此序列限制为仅包含内部带有“香蕉”的水果元素。即,我希望结果是:

<fruits>
  <fruit>
    <name>banana</name>
    <taste>yellow</taste>
  </fruit>
  <fruit>
    <name>banana</name>
    <taste>green</taste>
  </fruit>
<fruits>
4

1 回答 1

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>
于 2012-04-13T14:38:44.930 回答