Avec plus d'un peu d'aide de daviderossi.blogspot.com j'ai réussi à obtenir un code de travail pour remplacer une valeur xml avec un autre
Cela me donne le résultat suivant toutes deux modifications de la valeur à la position «ix» MAIS ajoute également un deuxième exemplaire à la fin. Si je le recherche avec LastIndexOf et le supprime, il supprime la première occurrence. Des idées sur pourquoi le code pourrait faire cela, ou comment atténuer cet effet indésirable?
Groovy causes valeur de modification xml en double
def fm_xml = '''<?xml version="1.0" encoding="UTF-8"?>
<MAlong>
<Enquiry.ID>SC11147</Enquiry.ID>
<student.name_middle></student.name_middle>
<student.name_known></student.name_known>
<student.name_previous></student.name_previous>
<student.name_cert>John REnfrew</student.name_cert>
<student.detail_gender>M</student.detail_gender>
<student.sign_name>John Renfrew</student.sign_name>
<student.sign_date>05/01/2010</student.sign_date>
</MAlong>'''
xml = new XmlParser().parseText(fm_xml)
ix = xml.children().findIndexOf{it.name() =='student.name_middle'}
nn = new Node(xml, 'student.name_middle', "NEW")
if (ix != -1) {
xml.children()[ix] = nn
nn.parent = xml
}
writer = new StringWriter()
new XmlNodePrinter(new PrintWriter(writer)).print(xml)
result = writer.toString()
RÉSULTAT
<MAlong>
<Enquiry.ID>
SC11147
</Enquiry.ID>
<student.name_middle>
NEW
</student.name_middle>
<student.name_known/>
<student.name_previous/>
<student.name_cert>
John REnfrew
</student.name_cert>
<student.detail_gender>
M
</student.detail_gender>
<student.sign_name>
John Renfrew
</student.sign_name>
<student.sign_date>
05/01/2010
</student.sign_date>
<student.name_middle>
NEW
</student.name_middle>
</MAlong>
plus propre, beaucoup plus facile à lire, mais il jette une erreur: [student.name_middle] est une expression constante, mais il doit être une expression variable Je voudrais explorer cela car il semble très efficace.
Correction des valeurs répétées en faisant nn = new Node (null, 'student.name_middle', "NEW") –
Le script ci-dessus devrait fonctionner tel quel. J'ai ajouté une deuxième déclaration de modification montrant la modification des champs avec des noms dynamiques. – stefanglase
La sortie de cela produit une seule ligne. Y at-il un moyen de recréer l'arbre avec Markupbuilder ?? –