gpt4 book ai didi

xml - 为默认命名空间中的元素添加了 tag0 命名空间

转载 作者:数据小太阳 更新时间:2023-10-29 01:39:41 25 4
gpt4 key购买 nike

我正在尝试使用 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 awarenessXmlSlurper像这样:

import groovy.xml.XmlUtil

def pom = new XmlSlurper( false, false ).parse( 'pom.xml' )
println XmlUtil.serialize(pom)

哪个应该给你你想要的答案......目前不知道如何在 slurp/serialize 周期中维护评论:-(

如您所说,使用 XmlParser 可能可行,但我目前的尝试失败了 :-( 有 some code here可能 让您接近,但到目前为止我没有成功:-(

关于xml - 为默认命名空间中的元素添加了 tag0 命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9197588/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com