Ich möchte zur Laufzeit ein beliebiges Element in XML auswählen und seinen Wert aktualisieren. Zum BeispielScala - Wert eines beliebigen XML-Elements ändern
xml wie gegeben<root>
<abc>123</abc>
<def>456</def>
</root>
ich entweder <abc>
oder <def>
zur Laufzeit willkürlich wählen will (nicht fest einprogrammiert) und dessen Wert zu aktualisieren. Ich fand viele Fragen in verwandten Links, aber alle Lösung harten Code Label-Namen im Voraus.
habe ich versucht, Funktion, die Elementnamen und neuen Wert als params wie
object RuleFactory {
// This function should not hard code literals "abc" or "def"
def createRuleTransformer(name:String, value : String) : RuleTransformer = {
new RuleTransformer(new RewriteRule {
override def transform(n: Node): Seq[Node] = n match {
case elem @ Elem(prefix, label, attribs, scope, _) if elem.label.equalsIgnoreCase(name) => Elem(prefix, label, attribs, scope, false, Text(value))
case other => other
}
})
}
}
und
object RuleFactory {
def createRuleTransformer(name:String, value : String) : RuleTransformer = {
new RuleTransformer(new RewriteRule {
override def transform(n: Node): Seq[Node] = n match {
case elem : Elem if elem.label.equalsIgnoreCase(name) => elem copy (child = Text(value) flatMap (this transform))
case other => other
}
})
}
}
jedoch beide nicht gedruckt aktualisiert xml nimmt, wenn ich wie
val trasnformer = RuleFactory.createRuleTransformer("def", "2") // These params will be random
println(trasnformer(InputXml))
Transformation durchführen
Ist dies mit RewriteRule möglich?
Ja, RewriteRule ist der Weg, dies zu tun. – marios
Können Sie mir zeigen, wie Sie dies mit RewriteRule erreichen? – Hiren