Scala:akka http 解组 xml 字符串到大小写 类

Scala: akka http unmarshal xml strings to case classes

我有来自第三方 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 的解组函数的情况下执行此操作吗?我已经拥有的数据看起来足够具有声明性,无需额外的样板即可进行解组。

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)) ))                               │