我正在使用Groovy的XmlSlurper来解析和修改Maven的pom.xml.我的pom.xml声明了命名空间xsi.
<?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','')
您可以构建没有
namespace awareness的XmlSlurper,如下所示:
原文链接:https://www.f2er.com/xml/292279.htmlimport groovy.xml.XmlUtil def pom = new XmlSlurper( false,false ).parse( 'pom.xml' ) println XmlUtil.serialize(pom)
哪个应该给你你想要的答案…目前没有想到如何在slurp /序列化周期保持评论:-(
正如你所说,XmlParser可能是可能的,但是我目前的尝试失败了:-(有some code here可能会让你关闭,但是我还没有成功:-(