Sto cercando di analizzare e modificare un pom.xml di Maven utilizzando XmlSlurper di Groovy. Il mio pom.xml dichiara lo spazio dei nomi xsi.spazio dei nomi tag0 aggiunto per gli elementi nello spazio dei nomi predefinito
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>a-group-id</groupId>
<artifactId>an-artifact-id</artifactId>
La mia fonte Groovy è la seguente:
import groovy.xml.XmlUtil
def pom = new XmlSlurper().parse('pom.xml')
.declareNamespace('': 'http://maven.apache.org/POM/4.0.0',
xsi: 'http://www.w3.org/2001/XMLSchema-instance')
//manipulate the pom
println XmlUtil.serialize(pom)
Come si nota, ho dichiarato il primo spazio dei nomi come vuoto. Tuttavia nel tag di output0 viene aggiunto ovunque.
<?xml version="1.0" encoding="UTF-8"?>
<tag0:project xmlns:tag0="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">
<tag0:modelVersion>4.0.0</tag0:modelVersion>
<tag0:groupId>a-group-id</tag0:groupId>
<tag0:artifactId>an-artifact-id</tag0:artifactId>
Come evitare quello?
Per il momento la mia soluzione è rimuovere i tag manualmente:
println XmlUtil.serialize(pom).replaceAll('tag0:', '').replaceAll(':tag0', '')
La costruzione di 'XmlSlurper' senza supporto spazio dei nomi è sufficiente? es .: 'println XmlUtil.serialize (new XmlSlurper (false, false) .parse ('pom.xml'))'? –
wow, sì, era già abbastanza, grazie Tim. puoi fornirlo come risposta? Inoltre ho notato che tutti i commenti in XML sono persi, sai qualche soluzione per questo? A proposito, ecco le due utility che ho scritto [pomRm] (http://www.stefanolocati.it/blog/?p=1226) e [pomVersions] (http://www.stefanolocati.it/blog/?p= 1220). – stivlo
Non riesco a vedere come mantenere i commenti al momento ... Triste Avrò un pensiero se ottengo un momento libero questo pomeriggio ... –