2013-09-26 102 views
0

它是我以前的question的擴展。 如果我喜歡這個Groovy:刪除/添加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輸入的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. clientInfo中刪除所有RoleTypeCT節點。試過clientInfo.RoleTypeCT.replaceNode{},但它給了我錯誤。
  3. 對於原始it中的每個RoleTypeCT,將RoleTypeCT添加到clientInfo。像

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

東西,如果這種做法是確定的話怎麼會在首位刪除所有RoleTypeCT節點?

+0

同樣,這不是有效的XML輸出......你的意思是你想輸出3個單獨的文件?爲什麼不在你之前的問題中做XSLT來生成包裹在''節點中的3個節點,然後使用'XmlSlurper'將每個節點作爲單獨的文檔輸出(就像我最近對接受的答案的評論)? –

+0

別擔心。每個輸出將轉到XSLT進行轉換,然後它將基於它的PK添加到父xml中。多個Xmls發生了多重轉換。 –

+0

你知道我將如何從xml中刪除所有'RoleTypeCT'節點? –

回答

1

這裏是你如何刪除所有RoleTypeCT節點,但我仍然有你走在錯誤的道路的關注(見註釋質疑)

import groovy.xml.* 

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

client.RoleTypeCT*.replaceNode {} 

println XmlUtil.serialize(client) 
+0

謝謝。最後我按照你的建議實施它。 :) –