Skip to content

Instantly share code, notes, and snippets.

@retronym
Created April 29, 2011 15:51
Show Gist options
  • Save retronym/948507 to your computer and use it in GitHub Desktop.
Save retronym/948507 to your computer and use it in GitHub Desktop.
Scala XML Namespace wrangling
object XmlRewriteUtil {
def rewriter(f: PartialFunction[Node, NodeSeq]): RuleTransformer = new RuleTransformer(rule(f))
def rule(f: PartialFunction[Node, NodeSeq]): RewriteRule = new RewriteRule {
override def transform(n: Node) = if (f.isDefinedAt(n)) f(n) else n
}
}
def setNamespace(node: Node, prefix: String, namespace: String): Node = {
import XmlRewriteUtil._
rewriter {
case e: Elem if e == node => e.copy(scope = NamespaceBinding(prefix, namespace, parent = e.scope))
case e: Elem if e.prefix == null => e.copy(prefix = prefix)
}(node)
}
val modified = setNamespace(<a><b/><c:c/></a>, "fo", "uri:fons")
Assert.assertEquals(<fo:a xmlns:fo="uri:fons"><fo:b/><c:c/></fo:a>, modified)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment