Как создать целочисленный литерал как атрибут в выводе Scala XML?

Я ожидаю, что следующий код выдаст значение XML со следующим содержимым:

<TestInteger value="10"/>

Компилятор выдает ошибку

scala> import scala.xml._
import scala.xml._
scala> val x:Int = 10
x: Int = 10
scala> <TestInteger value={x}/>
<console>:8: error: overloaded method constructor UnprefixedAttribute with alternatives (String,Option[Seq[scala.xml.Node]],scala.xml.MetaData)scala.xml.UnprefixedAttribute <and> (String,String,scala.xml.MetaData)scala.xml.UnprefixedAttribute <and> (String,Seq[scala.xml.Node],scala.xml.MetaData)scala.xml.UnprefixedAttribute cannot be applied to (java.lang.String,Int,scala.xml.MetaData)
       <TestInteger value={x}/>

Что я делаю неправильно? Разрешены ли целочисленные литералы в XML?

Я использую Scala 2.7.7

2 ответа

Решение

Похоже, что ваш XML нарушает спецификацию XML, в соответствии с этим каждое значение атрибута должно начинаться с двойной кавычки. Смотрите правило AttValue.
Редактировать:
После некоторого поиска в гугле кажется, что scala.xml.UnprefixedAttribute имеет Constructor, который поддерживает только строки в качестве значений, так как нет встроенного неявного преобразования из Int в String, этот ваш код не будет работать так же, как код:

val a : String = 10

Scala теперь не умеет автоматически конвертировать целые числа в строки, но следующий код будет работать

implicit def intToString(i:Int) = i.toString  
val a : Int = 10
val b  = <Test attr={a}/>

Scala XML не поддерживает никаких типов, кроме String, Можно расширить библиотеку, чтобы добавить альтернативы Text, но как таковой поддержки нет.

Другие вопросы по тегам