When converting XML to Json attributes are being lost, given the below XML
document, we would expect
{"word":{"word":"content","self":"http://localhost:8080/word/example
","term":"example","available":"true"}}
where as we get {"word":"content"}
example XML:
<word term="example" self="http://localhost:8080/word/example";
available="true">content</word>

This is been tested on M1 and trunk.

Thanks in advance.

To repeat

// From the command line, adjust paths as needed

$scala -cp
/Users/jono/.m2/repository/com/thoughtworks/paranamer/paranamer/2.0/paranamer-2.0.jar:/Users/jono/.m2/repository/net/liftweb/lift-json/2.0-SNAPSHOT/lift-json-2.0-SNAPSHOT.jar

import scala.xml._
import net.liftweb.json.JsonAST._
import net.liftweb.json.Printer
import net.liftweb.json.Xml

val example1 = <word term="example" self="http://localhost:8080/word/example";
available="true">content</word>
val expected1 = """{"word":{"word":"content","self":"
http://localhost:8080/word/example","term":"example","available":"true"}}""";
val got1 = Printer.compact(render(Xml.toJson(example1)))


val example2 = <word term="example" self="http://localhost:8080/word/example";
available="true"></word>
val expected2 = """{"word":{"word":"content","self":"
http://localhost:8080/word/example","term":"example","available":"true"}}""";
val got2 = Printer.compact(render(Xml.toJson(example2)))


// Add to src/test/scala/net/liftweb/json/XmlBugs.scala

  "Jono's XML with attributes parses correctly" in {
val example1 = <word term="example" self="http://localhost:8080/word/example";
available="true">content</word>
val expected1 = """{"word":{"word":"content","self":"
http://localhost:8080/word/example","term":"example","available":"true"}}""";

val example2 = <word term="example" self="http://localhost:8080/word/example";
available="true"></word>
val expected2 = """{"word":{"word":"content","self":"
http://localhost:8080/word/example","term":"example","available":"true"}}""";

    Printer.compact(render(toJson(example1))) mustEqual expected1
    Printer.compact(render(toJson(example2))) mustEqual expected2
  }


Here is what I get when I run the example provided.


$scala -cp
/Users/jono/.m2/repository/com/thoughtworks/paranamer/paranamer/2.0/paranamer-2.0.jar:/Users/jono/.m2/repository/net/liftweb/lift-json/2.0-SNAPSHOT/lift-json-2.0-SNAPSHOT.jar
Welcome to Scala version 2.7.7.final (Java HotSpot(TM) 64-Bit Server VM,
Java 1.6.0_17).
Type in expressions to have them evaluated.
Type :help for more information.

scala> import scala.xml._
import scala.xml._

scala> import net.liftweb.json.JsonAST._
import net.liftweb.json.JsonAST._

scala> import net.liftweb.json.Printer
import net.liftweb.json.Printer

scala> import net.liftweb.json.Xml
import net.liftweb.json.Xml

scala>

scala> val example1 = <word term="example" self="
http://localhost:8080/word/example"; available="true">content</word>
example1: scala.xml.Elem = <word self="http://localhost:8080/word/example";
term="example" available="true">content</word>

scala> val expected1 = """{"word":{"word":"content","self":"
http://localhost:8080/word/example","term":"example","available":"true"}}""";
expected1: java.lang.String = {"word":{"word":"content","self":"
http://localhost:8080/word/example","term":"example","available":"true"}}

scala> val got1 = Printer.compact(render(Xml.toJson(example1)))
got1: String = {"word":"content"}

scala>


Jono

P.S I thought I had a fix, but it broke one of HarryH's tests.



scala>

scala> val example2 = <word term="example" self="
http://localhost:8080/word/example"; available="true"></word>
example2: scala.xml.Elem = <word self="http://localhost:8080/word/example";
term="example" available="true"></word>

scala> val expected2 = """{"word":{"word":"content","self":"
http://localhost:8080/word/example","term":"example","available":"true"}}""";
expected2: java.lang.String = {"word":{"word":"content","self":"
http://localhost:8080/word/example","term":"example","available":"true"}}

scala> val got2 = Printer.compact(render(Xml.toJson(example2)))
got2: String = {"word":null}

scala>

-- 
You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to lift...@googlegroups.com.
To unsubscribe from this group, send email to 
liftweb+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en.

Reply via email to