Я пишу пару скриптов для изменения файлов 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 не смог сказать мне, что именно.