appendNode 在特定位置使用 xmlSlurper

appendNode using xmlSlurper in a specific position

我将在下面包含 xml 结构:

@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)))   

}

您应该可以使用 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