如何将XML Groovy节点的值传递给变量

时间:2018-08-03 01:38:03

标签: groovy

我正在尝试复制此指令的结果:

 def xmlEntrada = new File("input.txt").text
    def entrada = new XmlParser().parseText(xmlEntrada)

        def usuarios = entrada.cust_PS_SF_compensation.findAll{ e-> e.cust_userId.toString() == codigoActual }
        def usuariosWithEndDate = entrada.cust_PS_SF_compensation.findAll{ e-> e.cust_userId.toString() == codigoActual }

但是变量usuariosWithEndDate的所有节点都具有相同的引用,我需要按此操作结果的值进行复制以进行并行编辑。

usuariosWithEndDate是一个arrayList,其对用法的引用不同,但是内容(节点)具有相同的引用,请帮助enter image description here

enter image description here

1 个答案:

答案 0 :(得分:1)

据我所知,我们想要clone()在这里。

给出此XML:

<entrada>
<cust_PS_SF_compensation>
    <cust_userId>5150</cust_userId>
</cust_PS_SF_compensation>
<cust_PS_SF_compensation>
    <cust_userId>6160</cust_userId>
</cust_PS_SF_compensation>
<cust_PS_SF_compensation>
    <cust_userId>7170</cust_userId>
</cust_PS_SF_compensation>
</entrada>

以下是带有assert语句作为规范形式的Groovy代码(如果我理解这个问题):

def xmlEntrada = new File("input.xml").text
def entrada = new XmlParser().parseText(xmlEntrada)
def codigoActual = "5150"

def usuarios = entrada.cust_PS_SF_compensation.findAll{ e ->
    e.cust_userId.text() == codigoActual 
}
assert 1 == usuarios.size()

def usuariosWithEndDate = entrada.cust_PS_SF_compensation.findAll{ e -> 
    e.cust_userId.text() == codigoActual 
}.collect { node ->
    node.clone()
}

assert 1 == usuariosWithEndDate.size()

assert ! usuarios[0].is(usuariosWithEndDate[0])
assert codigoActual == usuarios[0].cust_userId.text()
assert codigoActual == usuariosWithEndDate[0].cust_userId.text()