net generar factura example escribir elementos electronica crear asp archivo agregar xml scala

generar - Scala: cómo crear nodos XML de alguna colección



xelement c# example (3)

Si tienes algo como:

val myStuff = Array(Person("joe",40), Person("mary", 35))

¿Cómo se crea un valor XML con esos datos como nodos? Sé cómo usar {llaves} en una expresión XML para poner un valor, pero esta es una colección de valores. ¿Debo iterar explícitamente o hay algo mejor?

val myXml = <people>{ /* what here?! */ }</people>

El valor resultante debería ser algo así como:

<people><person><name>joe</name><age>40</age></person> <person><name>mary</name><age>39</age></person></people>


Como es un lenguaje de programación funcional Array.map es probablemente lo que estás buscando:

class Person(name : String, age : Int){ def toXml() = <person><name>{ name }</name><age>{ age }</age></person>; } object xml { val people = List( new Person("Alice", 16), new Person("Bob", 64) ); val data = <people>{ people.map(p => p.toXml()) }</people>; def main(args : Array[String]){ println(data); } }

Resultados en:

<people><person><name>Alice</name><age>16</age></person><person><name>Bob</name><age>64</age></person></people>


En realidad, la línea yield person.toXml () no compila para mí, pero yield person.toXml (sin los paréntesis) sí. La versión original se queja de ''aplicar valor de método sobrecargado'' incluso si cambio la definición de ''ToXml'' para devolver explícitamente un scala.xml.Elem


Para completar, también puede usar para ... rendimiento (o llamadas a función):

import scala.xml case class Person(val name: String, val age: Int) { def toXml(): xml.Elem = <person><name>{ name }</name><age>{ age }</age></person> } def peopleToXml(people: List[Person]): xml.Elem = { <people>{ for {person <- people if person.age > 39} yield person.toXml }</people> } val data = List(Person("joe",40),Person("mary", 35)) println(peopleToXml(data))

(error fijo observado por Woody Folsom)