感谢您花费时间尝试解决此问题, 很难在标题中描述问题,所以我将在这里尝试更具体:)
我无法删除仅具有元素值的父节(包括子节)。
示例: 我有一个XML文件。我使用XMLSlurper循环将其抛出,并存储了解析后的 field 元素。
<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文件应如下所示: / p>
<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>
答案 0 :(得分:1)
要删除问题中的节点,您可以执行以下操作:
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)
答案 1 :(得分:1)
所以我们最终找到了一种方法,蒂姆的回答很有帮助,谢谢
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 )
}
我们的主要问题是路径...