2011-11-07 6 views
12
scala> val count = 7 
count: Int = 7 

poniendo esto en un atributo XML da un error:XML Creación - Error: sobrecargado método constructor UnprefixedAttribute alternativas

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

Respuesta

23

entradas a los atributos XML deben ser cadenas. Los enteros y los objetos no se convertirán automáticamente a cadenas utilizando su método toString. Por ejemplo si ha definido una clase de tamaño utilizando una enumeración Unidades:

scala> object Units extends Enumeration { 
    | type Units = Value 
    | val COUNT = Value("count") 
    | val LB = Value("pounds") 
    | val OZ = Value("ounces") 
    | val GRAM = Value("grams") 
    | val KG = Value("kilograms") 
    | val GAL = Value("gallons") 
    | val QT = Value("quarts") 
    | val PINT = Value("pints") 
    | val FL_OZ = Value("fluid ounces") 
    | val L = Value("liters") 
    | } 
defined module Units 


scala> class Size(val value: Double, val unit: Units.Units) { 
    | override def toString = value + " " + unit.toString 
    | } 
defined class Size 

de crear una instancia de Tamaño:

scala> val seven = new Size(7, Units.COUNT) 
seven: Size = 7.0 count 

luego trató de poner su tamaño en un atributo XML, a pesar de ello obtener una error:

scala> val x = <element size={seven}/> 
<console>:10: error: overloaded method constructor UnprefixedAttribute with alternatives: 
    (key: String,value: Option[Seq[scala.xml.Node]],next: scala.xml.MetaData)scala.xml.UnprefixedAttribute <and> 
    (key: String,value: String,next: scala.xml.MetaData)scala.xml.UnprefixedAttribute <and> 
    (key: String,value: Seq[scala.xml.Node],next1: scala.xml.MetaData)scala.xml.UnprefixedAttribute 
cannot be applied to (java.lang.String, Size, scala.xml.MetaData) 
     val x = <element size={seven}/> 
       ^

Debe llamar explícitamente al método toString. Esto funciona:

scala> val x = <element count={count.toString} size={seven.toString}/> 
x: scala.xml.Elem = <element size="7.0 count" count="7"></element> 
Cuestiones relacionadas