sti*_*vlo 17 xml groovy parsing xmlslurper
我正在尝试使用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>
Run Code Online (Sandbox Code Playgroud)
我的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)
Run Code Online (Sandbox Code Playgroud)
正如您所注意到的,我已将第一个命名空间声明为空.但是在输出中,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>
Run Code Online (Sandbox Code Playgroud)
怎么避免呢?
目前我的解决方法是手动删除标签:
println XmlUtil.serialize(pom).replaceAll('tag0:', '').replaceAll(':tag0', '')
Run Code Online (Sandbox Code Playgroud)
tim*_*tes 22
您可以构造XmlSlurper没有名称空间感知,如下所示:
import groovy.xml.XmlUtil
def pom = new XmlSlurper( false, false ).parse( 'pom.xml' )
println XmlUtil.serialize(pom)
Run Code Online (Sandbox Code Playgroud)
哪个应该给你你想要的答案...目前不知道如何在slurp /序列化周期中保持评论:-(
正如你所说的,有可能使用XmlParser,但我目前的尝试都失败了:-(还有这里的一些代码,这可能让你关闭,但至今我没有成功:-(
| 归档时间: |
|
| 查看次数: |
5475 次 |
| 最近记录: |