2016-01-25 127 views
0

我有這樣的代碼:斯卡拉XML模板跳過元素

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> 

我該怎麼做?

回答

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> 
+0

不要忘記打勾你的答案 – ccheneson

+0

是的。我必須等兩天。所以我等待... – RajV

1

您可以嘗試在它之前map平合併2所列出

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

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

我相信在你的情況下發生的是評估塊時,斯卡拉返回最後一個表達式的值。在你的情況

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

我發佈的代碼是一個更復雜情況的簡化版本。這些列表包含兩種不同的類型,我不能將它們合併。 – RajV