如何从Groovy中的xml中删除不是特定字段的节点?

时间:2019-09-30 12:32:58

标签: xml groovy

如果内部没有字段,是否可以删除节点?

这是xml的示例:

    <nodes xmlns:d="www.test.com" xmlns:m="www.type.com">
        <m:node>
            <d:id>1</d:id>
        </m:node>
        <m:node>
            <d:id>2</d:id>
            <d:status>ok</d:status>
        </m:node>
    </nodes>

这是我需要的结果:

<nodes xmlns:d="www.test.com" xmlns:m="www.type.com">
    <m:node>
         <d:id>2</d:id>
         <d:status>ok</d:status>
    </m:node>
</nodes>

这是我尝试的代码:

String myxml = """
<nodes xmlns:d='ww.test.com' xmlns:m='www.type.com'>
  <m:node>
     <d:id>1</d:id>
  </m:node>
  <m:node>
     <d:id>2</d:id>
     <d:status>ok</d:status>
  </m:node>
</nodes>
"""

def xml=new XmlParser().parseText(myxml)

def nodeToDel=xml.nodes.node.find { it.'d:status'.text() == '' }
if (nodeToDel != null){
    nodeToDel.print(nodeToDel);
    parent = nodeToDel.parent()
    parent.remove(nodeToDel)
}

您能帮我删除该字段为空的节点吗?

谢谢 拜斯

1 个答案:

答案 0 :(得分:1)

这应该可以满足您的需求:

def xml = new XmlParser(false, false).parseText(myxml)

xml.'m:node'.each {
    if (!it.'d:status'?.text()) {
        xml.remove(it)
    }
}

new XmlNodePrinter(System.out.newPrintWriter()).with {
    preserveWhitespace = true
    it.print(xml)
}

它将结果xml打印到System.out ...如果您需要文件或其他内容,则需要创建一个PrintWriter,并将其作为参数传递给XmlNodePrinter构造函数