Как удалить определенный родительский (с дочерним) раздел, имеющий только элемент XML с использованием groovy - PullRequest
0 голосов
/ 14 июня 2019

Спасибо, что потратили время на решение этой проблемы, Трудно описать проблему в названии, поэтому я постараюсь быть более конкретным здесь:)

У меня проблемы с удалением родительского раздела (включая дочерние) только со значением элемента.

Пример: У меня есть файл XML. Я закинул его с помощью XMLSlurper и сохранил проанализированный поле элемент.

   <fieldPermissions>
        <editable>false</editable>
        <field>Case.ClosedDate</field>
        <readable>false</readable>
    </fieldPermissions>
    <fieldPermissions>
        <editable>false</editable>
        <field>Case.ClosedOnCreate</field>
        <readable>false</readable>
    </fieldPermissions>
    <fieldPermissions>
        <editable>false</editable>
        <field>Case.ContactId</field>
        <readable>false</readable>
    </fieldPermissions>
    <fieldPermissions>
        <editable>false</editable>
        <field>Case.Description</field>
        <readable>false</readable>
    </fieldPermissions>

Таким образом, я сохраняю проанализированные поля на карте, как на карте:

delList.put(file.name, [
            fields: [Case.ContactId, Case.ClosedDate...], recordTypes: [], objects: []
    ])

Конец Результат , который я хочу: Например, я хочу удалить Case.ContactId, я храню его в своей карте delList, но я не знаю, как удалить весь родительский раздел со всеми дочерними элементами внутри него, поэтому конечный XML-файл должен выглядеть следующим образом:

    <fieldPermissions>
        <editable>false</editable>
        <field>Case.ClosedDate</field>
        <readable>false</readable>
    </fieldPermissions>
    <fieldPermissions>
        <editable>false</editable>
        <field>Case.ClosedOnCreate</field>
        <readable>false</readable>
    </fieldPermissions>
     //This was Case.ContactId section that i want to delete
    <fieldPermissions>
        <editable>false</editable>
        <field>Case.Description</field>
        <readable>false</readable>
    </fieldPermissions>

Ответы [ 2 ]

1 голос
/ 14 июня 2019

Итак, в конце концов мы нашли способ, помог ответ Тима, спасибо

delList.each { profileName, value ->
    def profile = xs.parse(new File(profileFolder.path  + "/" + profileName))

if (value.fields.size() > 0) {
    profile.fieldPermissions.each { fieldPermission ->
        if (value.fields.find { it == fieldPermission.field.text() }) {
            fieldPermission.replaceNode {}
        }
    }
}



  //println groovy.xml.XmlUtil.serialize( profile )
}

Нашей главной проблемой был путь ....

1 голос
/ 14 июня 2019

Чтобы удалить узел в вопросе, вы можете просто сделать:

def xml = '''
<xml>
   <fieldPermissions>
        <editable>false</editable>
        <field>Case.ClosedDate</field>
        <readable>false</readable>
    </fieldPermissions>
    <fieldPermissions>
        <editable>false</editable>
        <field>Case.ClosedOnCreate</field>
        <readable>false</readable>
    </fieldPermissions>
    <fieldPermissions>
        <editable>false</editable>
        <field>Case.ContactId</field>
        <readable>false</readable>
    </fieldPermissions>
    <fieldPermissions>
        <editable>false</editable>
        <field>Case.Description</field>
        <readable>false</readable>
    </fieldPermissions>
</xml>
'''

import groovy.xml.XmlUtil

def doc = new XmlSlurper().parseText(xml)

doc.fieldPermissions.find { it.field.text() == 'Case.ContactId' }.replaceNode {}

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