1

そのような文字通りの構文を使用してXMLを生成する方法はありますか?

<a>
{
  for (i <- Range(1, 3)) yield {
    <b>{i}</b>
  }
}
</a>

それは戻ります

<a><b>1</b><b>2</b></a>

つまり、完全なXMLリテラルを返す単一の複合ステートメントを使用したいのです。

私が知っている唯一の方法は、2つのステップでそれを行うことです。最初のステップでfor-yieldステートメントはIndexedSeqまたは類似のものを返し、2番目のステップでそれをscala.xml.Elemに変換する必要があります。それは問題ありませんが、私はあなたがもっと簡潔になることができると感じています-上記の私のコードで提案したものとほぼ同じくらい簡潔です。

ありがとう。

4

3 に答える 3

1

特に理解のために使用したいですか?そうでない場合、これはあなたが探している出力を与えるはずです:

<a>{
  (Range(1, 3)).map{ vl => 
     <b>{vl}</b>
  }
}</a>
于 2012-10-05T01:54:48.433 に答える
1

あなたが投稿したものはうまく機能します...

タイピングに関してより簡潔にしたい場合は、次の内部ステートメントを使用できます。

(1 to 3).map{i => <b>{i}</b>}
//or
for(i<-1 to 3) yield <b>{i}</b>

だからあなたはこれを持っているでしょう:

val xml = <a>{ (1 to 3).map{ i => <b>{i}</b> } }</a>

これは

xml: scala.xml.Elem = <a><b>1</b><b>2</b><b>3</b></a>
于 2012-10-05T02:25:46.703 に答える
0

for構文が必要な場合は、Seq[Node]からNodeSeqへの暗黙的な変換が必要です。コードを書き留めますが、今は電話中です...

于 2012-10-05T11:54:13.227 に答える