如何将Groovy Node对象的命名空间设置为另一个值?

时间:2011-07-25 19:45:20

标签: xml groovy namespaces

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

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

但是我不相信这是最好的方式 - 特别是它没有关注属性。 Node甚至可以实现这一点吗?如果是这样,那么这种惯用方法是什么?

1 个答案:

答案 0 :(得分:0)

我想不出一种方法......你可以使用JDOM(转换为Groovy脚本from this example

@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 )
}