Groovy:删除/添加Xml节点

时间:2013-09-26 13:22:08

标签: xml groovy

这是我之前question的扩展。 如果我像这样输入xml

<ClientInformation>
        <FirstName>Steve</FirstName>
        <LastName>Jobs</LastName>
        <MiddleName/>
        <DateOfBirth>09/18/2013</DateOfBirth>
        <RoleTypeCT>OWN</RoleTypeCT>
        <RoleTypeCT>IBE</RoleTypeCT>        
        <RoleTypeCT>Insured</RoleTypeCT>
</ClientInformation>

输出Xml应为

<ClientInformation>
            <FirstName>Steve</FirstName>
            <LastName>Jobs</LastName>
            <MiddleName/>
            <DateOfBirth>09/18/2013</DateOfBirth>
            <RoleTypeCT>OWN</RoleTypeCT>
    </ClientInformation>
<ClientInformation>
            <FirstName>Steve</FirstName>
            <LastName>Jobs</LastName>
            <MiddleName/>
            <DateOfBirth>09/18/2013</DateOfBirth>
            <RoleTypeCT>IBE</RoleTypeCT>        
    </ClientInformation>
<ClientInformation>
            <FirstName>Steve</FirstName>
            <LastName>Jobs</LastName>
            <MiddleName/>
            <DateOfBirth>09/18/2013</DateOfBirth>   
            <RoleTypeCT>Insured</RoleTypeCT>
    </ClientInformation>

Groovy代码

if(it.name()=="ClientInformation") {
  println it.RoleTypeCT.size() //prints 3 on console

}

我正在考虑以下步骤:

  1. it分配给本地变量。 def clientInfo = it
  2. RoleTypeCT删除所有clientInfo个节点。试过clientInfo.RoleTypeCT.replaceNode{},但它给了我错误。
  3. 对于原始it中的每个RoleTypeCT,将RoleTypeCT添加到clientInfo。像

    这样的东西

    it.RoleTypeCT.each { def roleType = it clientInfo.appendNode(roleType) }

  4. 如果这种方法没问题那么如何在第一时间删除所有RoleTypeCT个节点?

1 个答案:

答案 0 :(得分:1)

以下是删除所有RoleTypeCT节点的方法,但我仍然担心您走的路径错误(请参阅提问评论)

import groovy.xml.*

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

client.RoleTypeCT*.replaceNode {}

println XmlUtil.serialize( client )