У меня есть скрипт Groovy, который берет XML из веб-службы и преобразует его в JSON.В дополнение к преобразованию XML в JSON мне также необходимо удалить большое количество узлов из XML.Мой входящий XML довольно сложен и связан с работой, поэтому я не могу поделиться им, но вот что-то похожее.Узел события повторяется.
<root>
<event>
<description>
<type>earthquake name</type>
<text>10km ENE of Blackhawk, CA</text>
</description>
<origin>
<time>
<value>2019-02-21T23:49:44.800Z</value>
</time>
<longitude>
<value>-121.805</value>
</longitude>
<latitude>
<value>37.8538333</value>
</latitude>
<evaluationMode>manual</evaluationMode>
<creationInfo>
<agencyID>NC</agencyID>
<creationTime>2019-02-22T00:08:10.440Z</creationTime>
<version>4</version>
</creationInfo>
</origin>
<magnitude>
<mag>
<value>2.05</value>
<uncertainty>0.205</uncertainty>
</mag>
<type>md</type>
<stationCount>36</stationCount>
<originID>quakeml:earthquake/product.xml</originID>
<evaluationMode>manual</evaluationMode>
<creationInfo>
<agencyID>NC</agencyID>
<creationTime>2019-02-22T00:08:10.440Z</creationTime>
</creationInfo>
</magnitude>
<type>earthquake</type>
<creationInfo>
<agencyID>nc</agencyID>
<creationTime>2019-02-22T04:37:04.668Z</creationTime>
<version>4</version>
</creationInfo>
</event>
<more events here...../>
</root>
Мне нужно убрать этот документ только из тех элементов, которые мне нужны.В примере XML допустим, что я хочу удалить узлы creationInfo из обоих origin и magnitude в каждом из событий в дополнение ко множеству других узлов,В идеале я хотел бы отфильтровать узлы на основе списка разрешенных имен узлов.Я использую XmlSlurper для анализа входящего XML, создания карты, а затем использую JsonOutput для создания JSON.Я упоминаю об этом, потому что думаю, что я мог бы также извлечь узлы из Map или объекта JsonOutput, если это проще.Я успешно удалил один целевой узел с помощью метода replaceNode:
root.event.description.replaceNode { }
К сожалению, это приведет к удалению только одного узла, на самом деле, это приведет к сбою в моем примере XML, если у меня будет более одного события.Я думаю, что ответом будет итерация по моему XML, создание коллекции узлов, которые я хочу удалить, и затем итерация по этой коллекции для удаления узлов по отдельности.Любые примеры или альтернативные подходы будут оценены.