【问题标题】:Groovy. Open, Modify and Write xml file绝妙的。打开、修改和写入 xml 文件
【发布时间】:2023-02-10 04:25:06
【问题描述】:

我正在尝试使用 XmlSlurper 读取和更改 pom.xml 的一个特定节点,但我无法更改原始文件。

原来的 pom.xml:

<myFile>
...
   <tag1>
    <tag2>
        <name1>something1</name1>
        <name2>something2</name2>
        <name3>something3</name3>
    </tag2>
   </tag1>
...
</myFile>

我需要替换现有信息并添加更多信息,如下所示:

<myFile>
...
   <tag1>
    <tag2>
        <name1>something4</name1>
        <name2>something5</name2>
        <name3>something6</name3>
        <name4>something7</name4>
    </tag2>
   </tag1>
...
</myFile>

我尝试了多种方法,最接近的是这段代码:

def file = new File('pom.xml')
def xml = new XmlSlurper().parse(file)

xml.tag1.tag2[0].replaceNode { 
        name1("something1")
        name2("something2")
        name3("something3")
        name4("something4")
        }


def writer = new FileWriter(file)
new XmlNodePrinter(new PrintWriter(writer)).print(xml)

但是当我运行这段代码时,原来的 pom.xml 是空的。我知道有很多关于此的帖子,但我无法让它发挥作用。我究竟做错了什么?

【问题讨论】:

    标签: xml groovy xml-parsing xmlslurper


    【解决方案1】:

    您需要修改 replaceNode 内容,以便将 tag2 替换为不同版本的 tag2 并使用不同的写入文件的方式,如下所示:

    import groovy.xml.XmlSlurper
    
    def file = new File('pom.xml')
    def xml = new XmlSlurper().parse(file)
    
    xml.tag1.tag2.replaceNode {
        tag2 {
            name1("something1")
            name2("something2")
            name3("something3")
            name4("something4")
            name5("something5")
        }
    }
    
    def writer = new FileWriter(file)
    groovy.xml.XmlUtil.serialize(xml, writer)
    

    这是一种更简洁的方式,当您只想尝试更新时,它允许您打印而不是写入文件: println groovy.xml.XmlUtil.serialize(xml)

    【讨论】:

      猜你喜欢
      • 2021-05-02
      • 1970-01-01
      • 2020-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-21
      • 2021-12-05
      • 2015-11-30
      相关资源
      最近更新 更多