在 gradle 中更新具有特定 id 的 xml 元素

2024-04-12

我想在 xml 文件中进行以下更改

我的测试.xml

<root>
    <display-name>Some Name</display-name>
    ....
    <resource-ref id='change'>
        <resource-name>Change this</resource-name>
    </resource-ref>
    <resource-ref id='modify'>
        <resource-name>Change this too</resource-name>
    </resource-ref>
</root>

我想对此 xml 文件进行更改,使其看起来像这样

<root>
    <display-name>Final Name</display-name>
    ....
    <resource-ref id='change'>
        <resource-name>After Change</resource-name>
    </resource-ref>
    <resource-ref id='modify'>
        <resource-name>After Modify</resource-name>
    </resource-ref>
</root>

第一个答案在this https://stackoverflow.com/questions/2245641/load-modify-and-write-an-xml-document-in-groovy问题几乎回答了我的问题。但我需要对具有特定 id 的元素进行特定更改,如您所见。

这看起来很简单。我尝试寻找答案但未能找到。任何帮助表示赞赏。

顺便说一句,我的 gradle 脚本看起来像这样

task ("replace")<<{
def xmlSource = file(path/to/test.xml)
def xmlDest = file(path/to/destination)
def xmlParser = new XmlParser()
xmlParser.setFeature("http://apache.org/xml/features/disallow-doctype-decl", false)
def xmlRoot = xmlParser.parse(xmlSource)

xmlRoot.'display-name'[0].value = 'RTM16'
//Looking for something like this
//xmlRoot.'resource-ref'[@id='change'].'resource-name'[0].value = 'After Change'
//xmlRoot.'resource-ref'[@id='modify'].'resource-name'[0].value = 'After Modify'

def nodePrinter = new XmlNodePrinter(new PrintWriter(new FileWriter(xmlDest)))
nodePrinter.preserveWhitespace = true
nodePrinter.print(xmlRoot)
}

经历了之后节点(Groovy 2.4.6) http://docs.groovy-lang.org/latest/html/api/groovy/util/Node.html我想出了这个

task ("replace")<<{
xmlSource = file(path/to/xml source file)
xmlDest = file(path/to/destinationfile)
def parser = new XmlParser()
def xmlRoot = parser.parse(xmlSource)
xmlRoot.each{
    if(it.name().equals("resource-ref")&& [email protected] /cdn-cgi/l/email-protection("change")){
        it.'resource-name'[0].value = 'After Change'
    }
    else if(it.name().equals("resource-ref")&& [email protected] /cdn-cgi/l/email-protection("modify")){
        it.'resource-name'[0].value = 'After Modify'
    }
}

def b = new XmlNodePrinter(new PrintWriter(new FileWriter(xmlDest)))
b.preserveWhitespace = true
b.print(z)
}

不确定这是否是最好的方法。但它有效

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 gradle 中更新具有特定 id 的 xml 元素 的相关文章

随机推荐