1

有没有办法使用文字语法生成 XML,如下所示:

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

那将返回

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

即,我只想使用一个复合语句,它会以某种方式返回完整的 XML 文字。

我知道的唯一方法是分两步完成:在第一步中,for-yield 语句将返回 IndexedSeq 或类似的东西,然后在第二步中我必须将其转换为 scala.xml.Elem。没关系,但我觉得你可以更简洁 - 几乎与我在上面的代码中提出的一样简洁。

谢谢。

4

3 回答 3

1

Do you specifically want to use the for comprehension? If not, this should give you the output you are looking for:

<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 回答