Scala + Lift:解析XML时出现模糊的隐式转换

时间:2011-03-23 10:53:22

标签: xml scala lift

我有一个从xml-Node中提取动作对象的方法:

    private def appendActionsFromXml(device: Device, xml: Node) = {
    xml \ "actions" \ "action" map {
        x => {
            val key = x \ "@key" text
            val value = x \ "@value" text
            device.createAction(key, value)
        }
    }
}

但是,由于我在同一个类中导入了导入net.liftweb.json.JsonDSL._,因此当我从x中提取“@key”属性时,我会感到一种暧昧:

[INFO] Note that implicit conversions are not applicable because they are ambiguous
[INFO]  both method string2jvalue in trait Implicits of type (x: String)net.liftweb.json.JsonAST.JString
[INFO]  and method augmentString in object Predef of type (x: String)scala.collection.immutable.StringOps
[INFO]  are possible conversion functions from String to ?{val apply: ?}
[INFO]  val value = x \ "@value" text

如何通过这种方法解决这种暧昧关系?

3 个答案:

答案 0 :(得分:0)

试试这个:

val key: String = x \ "@key" text
val value: String = x \ "@value" text

答案 1 :(得分:0)

如果可能,将您的JsonDSL-import(或相反的XML-imports)移动到较小的范围。

class A {
  def doXmlStuff = { ... }
  def doJsonStuff = {
    import net.liftweb.json.JsonDSL._
    ...
  }
}

答案 2 :(得分:0)

通常,解决此类问题的方法是减少导入范围。在这种情况下,您可能不需要在包含net.liftweb.json.JsonDSL._的范围内使用appendActionsFromXml。很难说如果没有看到更多的背景,这是否会奏效。