如何在Scala XML输出中生成整数文本作为属性?
我希望以下代码生成包含以下内容的XML值:如何在Scala XML输出中生成整数文本作为属性?,xml,scala,xml-literals,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 construct
<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}/>
scala>导入scala.xml_
导入scala.xml_
scala>val x:Int=10
x:Int=10
斯卡拉>
:8:错误:重载方法构造函数unfixedattribute,带有可选项(字符串,选项[Seq[scala.xml.Node]],scala.xml.MetaData)scala.xml.unfixedattribute(字符串,字符串,scala.xml.MetaData)scala.xml.unfixedattribute(字符串,Seq[scala.xml.Node],scala.xml.MetaData)scala.xml.unfixedattribute无法应用于(java.lang.String、Int、scala.xml.MetaData)
我做错了什么?XML中允许整数文本吗
我使用的是Scala 2.7.7,看起来您的XML违反了XML规范,因为每个属性值必须以双引号开头。请参阅AttValue规则。
编辑:
在谷歌上搜索之后,它的构造函数似乎只支持字符串作为值,因此,由于没有内置从Int到字符串的隐式转换,您的代码将无法与代码相同:
val a : String = 10
Scala现在不知道如何将整数自动转换成字符串,但下面的代码可以工作
implicit def intToString(i:Int) = i.toString
val a : Int = 10
val b = <Test attr={a}/>
隐式def intToString(i:Int)=i.toString
val a:Int=10
val b=
Scala XML不支持除字符串以外的任何类型。可以扩展库以添加文本的替代项,但实际上不支持。不过,模式仍然允许整数值(我将放弃使用引号,但仍然希望将参数视为整数。这是错误的。Scala XML只支持属性中的String
值,但支持节点的任何类型!{5}
将编译。整数文本5
将封装在Atom[Int]中)
。这适用于所有类型!@Martin mmmmmmm。我认为Atom
是抽象的,唯一的子类是Text
、Unparsed
和PCData
。Atom不是抽象的(请参见)。scala>val xml={42}
xml:scala.xml.Elem=42
scala>xml.child(0)。isInstanceOf[scala.xml.Atom[Int]]
res0:Boolean=true
@马丁在你的评论之后我注意到了这一点,但我认为以前没有。顺便说一句,Int
没有被选中,因为它被类型擦除了。是的,它是一个Atom
,但它也是一个文本
。你仍然可以从Atom
中获取Int
或任何其他对象因为它存储在Atom[T]
的data
字段中,所以它不同于Text(42.toString)