Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Apr 24th, 2012  |  syntax: None  |  size: 1.46 KB  |  hits: 29  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. Jerkson makes Scala JSON so easy, can it be the same for XML?
  2. Json(generate(Job.search(parseDate(date),accountId)
  3.       .map(job => Map("id" -> job.id,
  4.       "name" -> job.name,
  5.       "userId" -> job.userId.getOrElse("")
  6.     ))))
  7.        
  8. def tag( name: String, content: Seq[Node] ): Node =
  9.   <xml></xml>.copy( label = name, child = content )
  10.  
  11. def toXML( label: String, content: String ): Node =
  12.   tag( label, Text( content ) )
  13.  
  14. def toXML( root: String, map: Map[_,_] ): Node = {
  15.   val children = for( (k,v) <- map ) yield {
  16.     v match {
  17.       case m: Map[_,_] => toXML( k.toString, m )
  18.       case a => toXML(k.toString, a.toString )
  19.     }
  20.   }
  21.   tag( root, children.toSeq )
  22. }
  23.        
  24. val data = Map(
  25.   "id" -> 121,
  26.   "foo" -> Map(
  27.     "hoo" -> "bar",
  28.     "goo" -> "baz"
  29.   )
  30. )
  31.  
  32. val xml = convert.toXML( "example", data )
  33.        
  34. <example>
  35.   <id>121</id>
  36.   <foo>
  37.     <hoo>bar</hoo>
  38.     <goo>baz</goo>
  39.   </foo>
  40. </example>
  41.        
  42. val someNode = <root>
  43.                    <child>
  44.                        Some stuff goes here
  45.                    </child>
  46.                </root>
  47.  
  48. someNode  "child" // returns the child node
  49.  
  50. someNode  "child" text // returns the text of the child node
  51.        
  52. val ns = Namespace("test:uri")
  53. val nsa = Namespace("test:uri:attribs")
  54. val nsp = nsa.prefixed("pre")
  55.  
  56. val builder =
  57.   ns("Elem") /@ (nsa("pre", "attr1") -> "val1",
  58.                "attr2" -> "val2",
  59.        nsp("attr3") -> "val3") /(
  60.     ns("Child"),
  61.     "Mixed Content",
  62.     ns("Child2") /( ns("Subchild") ~> "text" )
  63.   )