使用变量和重写规则的scala-xml转换

使用变量和重写规则的scala-xml转换,scala,scala-xml,Scala,Scala Xml,我正在玩scala xml转换,我下面的程序没有给我预期的输出 import scala.xml.{Elem, Node, Text} import scala.xml.transform.{RewriteRule, RuleTransformer} object XmlTransform extends App { val name = "contents" val value = "2" val InputXml : Node = <root>

我正在玩scala xml转换,我下面的程序没有给我预期的输出

import scala.xml.{Elem, Node, Text}
import scala.xml.transform.{RewriteRule, RuleTransformer}

object XmlTransform extends App {
  val name = "contents"
  val value = "2"

  val InputXml : Node =
    <root>
      <subnode>1</subnode>
      <contents>1</contents>
    </root>

  val transformer = new RuleTransformer(new RewriteRule {
    override def transform(n: Node): Seq[Node] = n match {
      case elem @ Elem(prefix, label, attribs, scope, _) if elem.label == name =>
        Elem(prefix, label, attribs, scope, false, Text(value))

      case other => other
    }
  })
  println(transformer(InputXml))
}
它打印出预期转换的xml

<root>
  <subnode>1</subnode>
  <contents>2</contents>
</root>

1.
2.

这里我做错了什么?

问题是匹配是在中定义的,它恰好有一个
名称
字段(在我的测试中,它的值为
)。此字段在外部范围内隐藏
名称
变量。重命名变量可以解决这个问题

case elem @ Elem(prefix, label, attribs, scope, _) if elem.label == "contents" =>
        Elem(prefix, label, attribs, scope, false, Text(value))
<root>
  <subnode>1</subnode>
  <contents>2</contents>
</root>