Scala - 从xml中完全删除命名空间

ed.*_*ed. 5 xml scala

我有一些xml:

<item name="ed" test="true"
  xmlns="http://www.somenamespace.com"
  xmlns:xsi="http://www.somenamespace.com/XMLSchema-instance">
  <blah>
     <node>value</node>
  </blah>
</item>
Run Code Online (Sandbox Code Playgroud)

我想通过这个xml并完全删除所有命名空间,无论它们在哪里.我如何使用Scala执行此操作?

 <item name="ed" test="true">
  <blah>
     <node>value</node>
  </blah>
</item>
Run Code Online (Sandbox Code Playgroud)

我一直在看RuleTransform和复制属性等,但我可以删除命名空间或删除属性但不删除命名空间并保留属性.

Tho*_*mas 8

标签是Elem对象,命名空间由scope值控制.所以要摆脱它你可以使用:

xmlElem.copy(scope = TopScope)
Run Code Online (Sandbox Code Playgroud)

但是,这是一个不可变的递归结构,因此您需要以递归方式执行此操作:

import scala.xml._

def clearScope(x: Node):Node = x match {
  case e:Elem => e.copy(scope=TopScope, child = e.child.map(clearScope))
  case o => o
}
Run Code Online (Sandbox Code Playgroud)

此函数将复制XML树,删除所有节点上的作用域.您可能还必须从属性中删除范围.