문제

다음과 같은 것이있는 경우

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

해당 데이터로 노드로 XML 값을 어떻게 작성합니까? XML 표현식에서 {Braces}를 사용하여 값을 넣는 방법을 알고 있지만 값 모음입니다. 명시 적으로 반복해야합니까, 아니면 더 나은 것이 있습니까?

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

결과 값은 다음과 같아야합니다.

<people><person><name>joe</name><age>40</age></person>
<person><name>mary</name><age>39</age></person></people>
도움이 되었습니까?

해결책

기능적 프로그래밍 언어 배열이므로 아마도 당신이 찾고있는 것일 것입니다.

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

결과 :

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

형식화 된 결과 (더 나은 읽기를 위해) :

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

다른 팁

완전성을 위해, 당신은 또한 ..yield (또는 함수 호출)에 사용할 수 있습니다.

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

(Woody Folsom이 언급 한 고정 오류)

실제로, 라인 수율 person.toxml ()는 나를 위해 컴파일하지 않지만, 수율 person.toxml (괄호 없음). 원래 버전은 'Toxml'의 def를 변경하여 Scala.xml.elem을 명시 적으로 반환하는 경우에도 '과부하 된 메소드 값 적용'에 대해 불평합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top