Desidero modificare un file XML esistente mantenendo il layout originale. Ciò include nuove linee, commenti, ecc. La modifica è composta dal trovare elementi all'interno dell'XML e modificare il valore del testo.Groovy modifica file XML, conserva commenti, interruzioni di riga
Il mio primo tentativo è stato utilizzare XMLParser con XmlUtil.serialize ma che non soddisfa il requisito.
Chiunque è a conoscenza di un'alternativa a XMLParser in cui le modifiche sono "in atto" della stringa XML originale? In caso contrario, forse esiste una libreria che esegue la ricerca utilizzando XPath/GPath e restituisce semplicemente la posizione della ricerca in modo da poter eseguire StringBuilder.replace.
EDIT:
Per ora ho fatto questa funzione, per trovare gli indici di stringa di nodo XML (che posso trovare utilizzando XPath) quindi sto facendo sostituire sugli indici. Funziona bene per i nodi semplici < nodo> valore </node>:
def find_location_by_node(xmlString, root_xml, node)
{
current_index = 0;
for(current_node in root_xml.depthFirst())
{
node_name = current_node.name().getLocalPart()
current_index = xmlString.indexOf('<' + node_name, current_index);
if(current_node == node)
{
end_tag = '</' + node_name + '>';
end_tag_index = xmlString.indexOf(end_tag, current_index) + end_tag.length();
return [current_index, end_tag_index];
}
}
return -1;
}
Grazie per la risposta :) – mbdev
groovy.xml.dom.DOMUtil non è in Groovy 1.8 e versioni successive. Per salvare è necessario utilizzare groovy.xml.XmlUtil.serialize (root). –
Ciò manterrà la formattazione ma perde i commenti. Per conservare i commenti in XML, dai un'occhiata qui: https://stackoverflow.com/questions/20690526/preserve-formatting-when-updating-xml-file-with-groovy#20720694 –