Scala XML模板跳过元素

时间:2016-01-25 16:18:47

标签: xml scala

我有这段代码:

val list1 = Seq("One", "Two", "Three")
val list2 = Seq("Four", "Five", "Six")

val xml = <Root>
  {
    list1.map { item =>
      <Item>{item}</Item>
    }
    list2.map { item =>
      <Item>{item}</Item>
    }
  }
</Root>

它正在创建一个这样的XML文档:

<Root>
  <Item>Four</Item>
  <Item>Five</Item>
  <Item>Six</Item>
</Root>

但我的目的是生成这份文件:

<Root>
  <Item>One</Item>
  <Item>Two</Item>
  <Item>Three</Item>
  <Item>Four</Item>
  <Item>Five</Item>
  <Item>Six</Item>
</Root>

我该怎么做?

2 个答案:

答案 0 :(得分:1)

您可以尝试在map ping之前合并2个列表

val list1 = Seq("One", "Two", "Three")
val list2 = Seq("Four", "Five", "Six")

val xml = <Root>
  {
    (list1 ++ list2).map { item =>
      <Item>{item}</Item>
    }
  }
</Root>

我相信你的情况是,在评估一个块时,Scala会返回最后一个表达式的值。在你的情况下

list2.map { item =>
   <Item>{item}</Item>
}

答案 1 :(得分:0)

要回答我自己的问题,似乎XML模板中的{}块只能返回一个NodeSeq值。所以,我需要将每个迭代包装在一个单独的{}。

val list1 = Seq("One", "Two", "Three")
val list2 = Seq("Four", "Five", "Six")

val xml = <Root>
  {
    list1.map { item =>
      <Item>{item}</Item>
    }
  }
  {
    list2.map { item =>
      <Item>{item}</Item>
    }
  }
</Root>