Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Scala XML输出中生成整数文本作为属性?_Xml_Scala_Xml Literals - Fatal编程技术网

如何在Scala 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

我希望以下代码生成包含以下内容的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}/>
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)