Groovy XML и пространство имен «xml:»

Я пишу пару скриптов для изменения файлов xml. В рассматриваемых файлах используется элемент xml:lang. Groovy (XmlSlurper), кажется, вставляет пространство имен tag0, против которого я бы не возражал, за исключением того, что это, похоже, прерывает последующую обработку с помощью XmlUtil.

Пример:

import groovy.xml.StreamingMarkupBuilder
import groovy.xml.XmlUtil

String source = """<?xml version='1.0' encoding='UTF-8'?>
<root>
    <one xml:lang="en">First</one>
    <one xml:lang="de">Second</one>
</root>
"""

def root = new XmlSlurper().parseText(source).declareNamespace(xml: "http://www.w3.org/XML/1998/namespace")
println root
String xml = new StreamingMarkupBuilder().bind{ 
    mkp.xmlDeclaration() 
    out << root 
}
println xml
println XmlUtil.serialize(xml)

результат

[Fatal Error] :2:44: The value of the attribute "prefix="xmlns",localpart="tag0",rawname="xmlns:tag0"" is invalid. Prefixed namespace bindings may not be empty.

Пространство имен xml: должно существовать по умолчанию, и я пытался добавить его с помощью .declareNamespace(), но это не помогло. Я чувствую, что упускаю что-то очевидное, но Google не смог сказать мне, что именно.

7
задан Erik Ackerman 6 March 2012 в 11:17
поделиться