如何在Scala XML输出中生成整数文字作为属性?

时间:2011-03-05 12:27:17

标签: xml scala xml-literals

我希望以下代码能够生成具有以下内容的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 个答案:

答案 0 :(得分:3)

根据this看起来您的XML违反了XML规范,每个属性值必须以双引号开头。参见AttValue规则 的修改
经过一些谷歌搜索后,似乎scala.xml.UnprefixedAttribute的构造函数只支持字符串作为值,所以由于没有从Int到String的内置隐式转换,你的代码将不能与代码相同:

val a : String = 10

Scala现在不会自动如何将整数转换为字符串,但是遵循代码可以正常工作

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

答案 1 :(得分:1)

Scala XML不支持String以外的任何类型。一个可以扩展库以添加Text的替代品,但实际上,没有支持。