0

前回の質問の延長です。このような入力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. original の RoleTypeCT ごとにit、 に追加RoleTypeCTclientInfoます。何かのようなもの

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

RoleTypeCTこのアプローチが問題ない場合、最初にすべてのノードを削除するにはどうすればよいでしょうか?

4

1 に答える 1

1

すべてのRoleTypeCTノードを削除する方法は次のとおりですが、間違った道を歩んでいるという懸念がまだあります(質問へのコメントを参照)

import groovy.xml.*

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

client.RoleTypeCT*.replaceNode {}

println XmlUtil.serialize( client )
于 2013-09-26T14:33:01.017 に答える