Xml 使用groovy StreamingMarkupBuilder忽略空元素

Xml 使用groovy StreamingMarkupBuilder忽略空元素,xml,groovy,markupbuilder,Xml,Groovy,Markupbuilder,Groovy的MarkupBuilder有一个omitNullAttributes和一个omitEmptyAttributes。但是StreamingMarkupBuilder没有 我有一个这样的标签 我可以从最终输出中省略它们吗 顺便问一下,我能不能用一下邮报上的技巧 更新: XML示例 <A> <Header><ID>1234</ID></Header> <Body> <item> <id>001

Groovy的
MarkupBuilder
有一个
omitNullAttributes
和一个
omitEmptyAttributes
。但是
StreamingMarkupBuilder
没有 我有一个这样的标签

我可以从最终输出中省略它们吗

顺便问一下,我能不能用一下邮报上的技巧

更新: XML示例

<A>
<Header><ID>1234</ID></Header>
<Body>
<item>
<id>001</id>
<foo />
</item>
</Body>
</A>

1234
001

是的,从注释中可以看出,您试图剥离的是空元素,而不是空属性

如果要从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 )
但是,如果您不想在使用StreamingMarkupBuilder时将空元素添加到XML中,我就不知道该怎么做。我想你可以重新执行来处理这个,但除此之外,你被卡住了

但是应该说,您在问题中指出的两个属性都不会使
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 )
defxml=''|
|1234
|
|
|001
|
|
|
|''.stripMargin()
def parser=new XmlParser().parseText(xml)
parser.depthFirst().each{
if(it.children().size()==0){
it.parent().remove(它)
}
}
新的XmlNodePrint().print(解析器)

你有没有举例说明你的意思<代码>没有任何属性,似乎是一个令人困惑的例子……现在我有一个类似的例子:。。。。我希望收到。。。。XML是一个复杂的XML,这样的空标记可能出现在XML中的任何位置(因此逐个检查不是一种情况)。但是无论是
ompitNullAttributes
还是
ompitEmptyAttributes
都不会从
MarkupBuilder
中删除
,会吗?看起来您正在尝试删除空元素,不是属性…@tim_yates:我使用StreamingMarkupBuilder,它没有这样的属性。更正更新了问题。对我不起作用。.depthFirst()调用中可能存在的问题?我的XML层次结构更复杂(超过1级)。@FoxyBOA不幸的是,除非你给出一个不起作用的示例,否则我无法再帮助你了。。。我的灵媒能力现在有点枯竭了…在原始帖子中添加一个例子。