2017-10-20 161 views
0

我将包含下面的xml结构:appendNode在特定位置使用xmlSlurper

@Rao,@tim_yates。实际的XML是:

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

我需要包括一个新的节点。新的XML必须是:

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

的问题是如何在追加一个新的节点?

我发现很多样本如何使用appendNode,但是,它始终是一个 root.child。我需要进一步去我的XML结构,追加一个节点在

prnReq.ltrPrnReqs.ltrPrnReq.ltrData

节点被列入为<salutation>

任何意见都欢迎。

下面是当前的代码。 非常感谢!

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

你能告诉你的XML? – Rao

+0

@Rao喜实际的XML是: encoded64文本 ***************************** ********************** 我需要在中包含一个新节点。新的XML必须是: 夫人XXX

+0

@Rao喜实际的XML是: ''' '' '' encoded64文本' ************************************************** * 我需要在中包含一个新节点。新的XML必须是: ''' '' '' '' 夫人 XXX'' '劳尔 –

回答

0

您应该可以使用appendNode添加新节点。

这是完整的示例,显示如何做到这一点。

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) 

您可以快速地在线试用demo

+0

Hi @Rao,现在正在工作!我在循环中遇到了一些问题,所以只有第一个客户已更新。我现在会做一些额外的测试。非常感谢!!! –

+0

hi @Rao我对这一个有一个额外的问题。在你方便的时候,如果你有任何想法,你可以请吗?链接:https://stackoverflow.com/questions/46936769/groovy-xmlparser-addnode-inserting-a-array-of-elements。非常感谢 –