Правильно, поэтому из комментариев, похоже, что вы пытаетесь удалить пустые элементы , не пустые атрибуты ...
Если вы хотите удалитьпустые узлы из xml, вам нужно прочитать их, найти пустые, удалить их, а затем записать обратно ...
Как в этом примере:
def xml = new StringWriter().with { sw ->
new groovy.xml.MarkupBuilder( sw ).with { mb ->
a {
b( 'tim' )
foo()
}
sw.toString()
}
}
def parser = new XmlParser().parseText( xml )
def emptykids = parser.depthFirst().findAll { it.children().size() == 0 }
emptykids.each {
parser.remove( it )
}
new XmlNodePrinter().print( parser )
Однако,если вы не хотите добавлять пустые элементы в ваш XML при использовании StreamingMarkupBuilder, я не знаю, как это сделать.Я думаю, вы могли бы повторно реализовать сам класс , чтобы справиться с этим, но кроме этого, вы застряли ...
Однако следует сказать, что ни один из двух атрибутов выуказание на вопрос заставит MarkupBuilder
сделать это либо.Он прекратит добавлять пустые атрибуты , но добавит пустые элементы
Теперь у нас есть пример для работы:
Попробуйте это:
def xml = '''|<A>
|<Header><ID>1234</ID></Header>
|<Body>
|<item>
|<id>001</id>
|<foo />
|</item>
|</Body>
|</A>'''.stripMargin()
def parser = new XmlParser().parseText( xml )
parser.depthFirst().each {
if( it.children().size() == 0 ) {
it.parent().remove( it )
}
}
new XmlNodePrinter().print( parser )