2

我有一个来自第三方 API 的简单 XML 响应。

假设它看起来像

<items>
    <item name="name1"/>
    <item name="name2"/>
    <item name="name3"/>
 </items>

有一个案例类

case class Items(children: List[Item]) 
case class Item(name: String)

我如何编写 unmarshaller 以隐式使用它将与这样的代码一起使用:

Unmarshal(myXmlString).to[Items].map ...

或更好

Unmarshal(myXmlString).to[List[Item]].map ...

我可以在不定义任何显式访问 XML 的解组函数的情况下做到这一点吗?我已经拥有的数据看起来具有足够的声明性,无需额外的样板即可解组。

4

1 回答 1

1

scala-xml 不提供任何反序列化器来处理您的自定义对象。如果要求很简单,如示例示例中所述,您可以尝试如下所示:

    scala> val itemsString = "<items><item name='name1'/><item name='name2'/><item name='name3'/></items>"   
    scala> val itemsXml = scala.xml.XML.loadString(itemsString)                                              
    scala> val items = Items(( itemsXml \\  "@name").toList.map(( x=> Item(x.toString)) ))                               │
于 2016-02-21T08:33:54.930 回答