2010-07-19 10 views
0

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 autreParse xml Groovy puis reconstruire

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

Cela me donne la sortie suivante, mais je adorerait être avec les balises de fermeture correctement formés autrement des requêtes XPath sur les nouvelles données seront alors échouer ..

donc par exemple

<student.name_known/> 

doit devenir

<student.name_known></student.name_known> 

Des idées?

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

Répondre

2

<student.name_known/>

est parfaitement formé, et les requêtes XPath doivent fonctionner parfaitement sur cette structure XML.

+0

pense que j'avais une erreur de copier et coller, il fait en effet le travail, mais était toujours intéressé à le rendre un peu plus lisible –

+0

Généralement, vous n'avez pas ce niveau de contrôle avec l'analyse XML. Je n'ai pas vu d'options «jolies» évidentes pour Groovy, mais toute solution n'en vaut probablement pas la peine. – Dunderklumpen