Как удалить узел, где нет определенного поля из XML в Groovy? - PullRequest
0 голосов
/ 30 сентября 2019

возможно ли удалить узел, если внутри него нет поля?

Это пример 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)
}

Не могли бы вы помочь мне удалить этот узел с пустым полем?

Спасибо Bais

1 Ответ

1 голос
/ 01 октября 2019

Это должно сделать то, что вы ищете:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...