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

とメソッド、コンストラクタUnprefixedAttributeはエラーを与える:XMLの作成 - エラー:オーバーロードされたXML属性の中にそれを置く代替

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}/> 

答えて

23

入力XML属性に文字列でなければなりません。整数とオブジェクトは、toStringメソッドを使用して自動的にStringに変換されません。あなたは単位の列挙型を使用してサイズのクラスを定義した場合 例えば:

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 

はサイズのインスタンスを作成:

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

はその後、XML属性にあなたのサイズを入れてみました、あなたはまだなるだろうエラー:

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}/> 
       ^

明示的にtoStringメソッドを呼び出す必要があります。作品:

scala> val x = <element count={count.toString} size={seven.toString}/> 
x: scala.xml.Elem = <element size="7.0 count" count="7"></element> 
関連する問題