2017-01-24 6 views
1

私はscala xml変換で遊んでいますが、私の下のプログラムでは期待した出力が得られません。変数とRewriteRuleを使用した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>1</contents> 
</root> 

case elem @ Elem(prefix, label, attribs, scope, _) if elem.label == "contents" => 
     Elem(prefix, label, attribs, scope, false, Text(value)) 

のような文は、それが何午前期待変換されたXML

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

をプリントアウト "場合場合" には名前の変数(私は望んでいませんでしたが)を私が交換した場合私はここで間違っている?

答えて

1

RewriteRuleの内部で一致が定義されていて、問題が発生するのはnameフィールドです(私のテストでは値は"<function1>"でした)。このフィールドは、外側の範囲にあるname変数をシャドウします。変数の名前を変更すると問題が解決されます。