Groovy 将更新的XML写入最初解析的文件

Groovy 将更新的XML写入最初解析的文件,groovy,gradle,xmlslurper,Groovy,Gradle,Xmlslurper,我有一个gradle.build,我试图: 读取XML文件 使用XmlSlurper更新读取XML文件中的属性 将更新后的XML写回最初解析的XML文件 第三步仅当我将修改后的XML写入一个新的不存在的XML文件,而不是原始解析的XML文件时才起作用 将修改后的XML写入原始解析的XML文件的最简单方法是什么 到目前为止,我的代码是: def inFile = file('file.xml') def outFile = file('_file.xml') def xml = new Xml

我有一个
gradle.build
,我试图:

  • 读取XML文件
  • 使用
    XmlSlurper
    更新读取XML文件中的属性
  • 将更新后的XML写回最初解析的XML文件
  • 第三步仅当我将修改后的XML写入一个新的不存在的XML文件,而不是原始解析的XML文件时才起作用

    将修改后的XML写入原始解析的XML文件的最简单方法是什么


    到目前为止,我的代码是:

    def inFile = file('file.xml')
    def outFile = file('_file.xml')
    
    def xml = new XmlSlurper().parse(inFile)
    
    // update xml code here
    
    def outBuilder = new StreamingMarkupBuilder()
    def outWriter = outFile.newWriter()
    XmlUtil.serialize(outBuilder.bind{ mkp.yield xml }, outWriter)
    

    我希望
    outFile
    成为
    file.xml
    ,以便它覆盖原始xml文件。

    如果执行以下操作,会发生什么情况:

    def inFile = file( 'file.xml' )
    def xml = new XmlSlurper().parse( inFile )
    
    xml.appendNode {
        haha( 'tim_yates' )
    }
    
    inFile.withWriter { outWriter ->
        XmlUtil.serialize( new StreamingMarkupBuilder().bind{ mkp.yield xml }, outWriter )
    }
    

    只是没有写出来?(似乎对我有用)

    Hi@tim_-yates,谢谢你的快速回复。您的示例代码运行良好,是一个有效的答案。然而,我的代码仍然无法正常工作,但肯定是因为另一个原因(原因还不完全是这个原因,但我基本上是先分解一个zip文件,然后尝试更新分解的归档文件中的一个xml文件。在我的代码中,我尝试通过文件树访问xml文件,因为我事先不知道文件的确切路径)。无论如何,我现在就结束这篇文章,因为你的答案基本上回答了我最初的问题!再次感谢,PM。@tim_yates,
    .bind{mkp.yield xml}
    部分做了什么?@ArtB我想这是一个快捷方式