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 に答える