2017-10-20 11 views
0

Je vais inclure la structure XML ci-dessous:appendNode utilisant XmlSlurper dans une position spécifique

@Rao, @tim_yates. Le xml réel est:

<prnReq> 
    <ltrPrnReqs> 
     <ltrPrnReq> 
      <ltrData>encoded64 text</ltrData> 
     </ltrPrnReq> 
    </ltrPrnReqs> 
</prnReq> 

Je dois inclure un nouveau nœud dans. Le nouveau fichier XML doit être:

<prnReq> 
    <ltrPrnReqs> 
    <ltrPrnReq> 
     <ltrData> 
     <Salutation>text</Salutation> 
     </ltrData> 
    </ltrPrnReq> 
    </ltrPrnReqs> 
</prnReq> 

La question est de savoir comment ajouter un nouveau nœud?

J'ai trouvé de nombreux exemples d'utilisation de appendNode, mais il s'agit toujours d'un root.child. Je dois aller plus loin dans ma structure XML et ajoutez un nœud à

prnReq.ltrPrnReqs.ltrPrnReq.ltrData

le nœud à inclure est <salutation>

Tous les commentaires sont les bienvenus.

Sous le code actuel. Merci beaucoup!

import groovy.xml.QName 
import groovy.xml.StreamingMarkupBuilder 
import groovy.xml.XmlUtil 

File doc = new File("C:/Temp/letter_.xml") 

def prnReq = new XmlSlurper().parse(doc) 
prnReq.ltrPrnReqs.ltrPrnReq.each {  

    def encodedString = it.ltrData.toString() 

    Base64.Decoder decoder = Base64.getMimeDecoder() 
    byte[] decodedByteArray = decoder.decode(encodedString) 

    def output = new String(decodedByteArray) 

    println output 

    output.splitEachLine(';') { items -> 
     println "raSalutation: " + items[0] 
     println "raFromAcc: " + items[1] 
     println "raPayableTo: " + items[2]   
     println "raSortCode: " + items[3] 
     println "raAccNum: " + items[4] 
     println "raReference: " + items[5] 
     println "raSendDate: " + items[6] 
     println "raRecDate: " + items[7] 
     println "raAmount: " + items[8] 
     println "raDummy1: " + items[9]   
     println "raFirstAmt: " + items[10]  
     println "raFirstDate: " + items[11]  
     println "raRegularAmt: " + items[12]  
     println "raRegularDate: " + items[13]  
     println "raFrequency: " + items[14]  
     println "raFee: " + items[15] 

     def toAdd = '"<salutation>$item[0]</salutation>"' 
     fragToAdd = new XmlSlurper().parseText(toAdd) 
     prnReq.ltrPrnReqs.ltrPrnReq.ltrData.appendNode(fragToAdd) 

    } 

    String outputFileName = "C:/Temp/letter_.xml" 

    XmlUtil xmlUtil = new XmlUtil() 
    xmlUtil.serialize(prnReq, new FileWriter(new File(outputFileName))) 

} 
+0

Pouvez-vous montrer votre xml? – Rao

+0

Salut @Rao le xml réelle est: encoded64 texte ***************************** ********************** Je dois inclure un nouveau nœud dans . Le nouveau fichier XML doit être: Mme XXX

+0

Salut @Rao le xml réelle est: '' '' '' ' texte encoded64' ********************************************** * Je dois inclure un nouveau nœud dans . Le nouveau XML doit être: '' '' '' '' ' Mme XXX' ' ' –

Répondre

0

Vous devriez pouvoir ajouter le nouveau noeud en utilisant appendNode.

Voici un exemple complet montrant comment faire.

def xmlString = """<prnReq> 
    <ltrPrnReqs> 
     <ltrPrnReq> 
      <ltrData>encoded64 text</ltrData> 
     </ltrPrnReq> 
    </ltrPrnReqs> 
</prnReq>""" 


def xml = new XmlSlurper().parseText(xmlString) 
def ltrData = xml.'**'.find{it.name() == 'ltrData'} 
ltrData.replaceBody() 
ltrData.appendNode { 
    Salutation('text') 
} 
println groovy.xml.XmlUtil.serialize(xml) 

Vous pouvez rapidement en ligne demo

+0

Salut @Rao, ça marche maintenant!J'ai un problème dans la boucle, donc seul le premier client a été mis à jour. Je vais faire quelques tests supplémentaires maintenant. MERCI BEAUCOUP!!! –

+0

hi @Rao J'ai une question supplémentaire sur celle-ci. Dans votre commodité tôt pourriez-vous s'il vous plaît si vous avez une idée là-bas? Lien: https://stackoverflow.com/questions/46936769/groovy-xmlparser-addnode-inserting-a-array-of-elements. Merci beaucoup –