我想使用Groovy的XmlSlurper解析和修改Maven的pom.xml。我的pom.xml聲明瞭命名空間xsi。爲默認名稱空間中的元素添加tag0名稱空間
<?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>
我的Groovy的來源如下:
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)
你可能注意到了,我宣佈第一個命名空間爲空。然而在輸出tag0中無處不在。
<?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>
如何避免這種情況?
眼下我的解決方法是手動刪除標籤:
println XmlUtil.serialize(pom).replaceAll('tag0:', '').replaceAll(':tag0', '')
正在構建'XmlSlurper'沒有名稱空間支持godd夠了嗎?即:'println XmlUtil.serialize(new XmlSlurper(false,false).parse('pom.xml'))'? – 2012-02-09 14:14:39
哇,是的,這已經夠了,謝謝蒂姆。你能把它作爲答案嗎?另外我注意到,XML中的所有註釋都丟失了,您是否知道它的任何解決方法?順便說一下,這裏是我寫的兩個工具[pomRm](http://www.stefanolocati.it/blog/?p=1226)和[pomVersions](http://www.stefanolocati.it/blog/?p= 1220)。 – stivlo 2012-02-09 14:51:08
目前無法看到如何保留評論... :-(如果我今天下午得到空閒時刻,我會想一想... – 2012-02-09 15:15:39