Xml 如何将Groovy节点对象的名称空间设置为另一个值?

Xml 如何将Groovy节点对象的名称空间设置为另一个值?,xml,groovy,namespaces,Xml,Groovy,Namespaces,我正在将XML文档从一个名称空间(和模式)转换为另一个名称空间(和模式)。JDOM允许我们调用Element.setNamespace()(它还负责元素的属性)。我能看到的与Groovy节点最接近的是 myNode.name = new QName("http://my/new/namespace", myNode.name.localPart) 但我不相信这是最好的方法——特别是,它没有考虑属性。对于Node,这甚至是可能的吗?如果是这样,惯用的方法是什么呢?我想不出一个现成的方法。。。不过

我正在将XML文档从一个名称空间(和模式)转换为另一个名称空间(和模式)。JDOM允许我们调用Element.setNamespace()(它还负责元素的属性)。我能看到的与Groovy节点最接近的是

myNode.name = new QName("http://my/new/namespace", myNode.name.localPart)

但我不相信这是最好的方法——特别是,它没有考虑属性。对于Node,这甚至是可能的吗?如果是这样,惯用的方法是什么呢?

我想不出一个现成的方法。。。不过,您可以只使用JDOM(转换为Groovy脚本)

@Grab(group='org.jdom', module='jdom', version='1.1')
import org.jdom.*
import org.jdom.input.*
import org.jdom.output.*

new SAXBuilder().build( new URL( 'http://cs.au.dk/~amoeller/XML/xml/recipes.xml' ) ).with { document ->
  def newDoc = new Element( 'collection' ).with { element ->
    addContent document.rootElement.getChild( 'recipe', Namespace.getNamespace( 'http://recipes.org' ) ).detach()
    new Document( element )
  }
  new XMLOutputter().output( newDoc, System.out )
}