2013-04-17 13 views
6
<Messdaten> 
    <EL_NR>NAYP99</EL_NR> 
    <EL_NR_Original/> 
    <Erfassungsdatum>2012-12-12 11:58:54.000</Erfassungsdatum> 
    <Massnahme>Lot_Hold</Massnahme> 
    <Anzahl_x0020_R>50</Anzahl_x0020_R> 
    <FEHLER>OK</FEHLER> 
    <SEQ>72</SEQ> 
</Messdaten> 

To jest mój XML i chcę zmienić wartość węzła "Anzahl_x0020_R". Problem polega na tym, że w czasie wykonywania nie znam dokładnej nazwy. Wiem tylko, że węzeł do zmiany rozpocznie się od "Anzahl". Więc zrobiłem to:XmlSlurper: Jak zmienić tekst dynamicznego węzła?

messdatenXML.childNodes().each { merkmal -> 
    if (merkmal.name.contains('Anzahl')) { 
     messdatenXML.merkmal = "my_new_value"; 
    } 
} 

Chodzi o to, że nie działa, wartość pozostanie taka sama. Jeśli to zrobię:

messdatenXML.Anzahl_x0020_R = "my_new_value" 

będzie działać, ale jak już powiedziałem, nie znam dokładnej nazwy w czasie wykonywania.

Odpowiedz

11

wierzę, trzeba użyć replaceBody tak:

messdatenXML.'**'.findAll { it.name().startsWith 'Anzahl' }.each { node -> 
    node.replaceBody 'my new value' 
} 
println groovy.xml.XmlUtil.serialize(messdatenXML) 
+0

Działa świetnie, dzięki! –

+0

dziękuję za 'replaceBody'. – Rao