如何使用 Gradle 和正则表达式解析 XML + 评论并保存到新文件

How to use Gradle and regex to parse XML + comments and save to a new file

如果我有一个下面形状的 XML 文件,并且想用 Groovy 中的正则表达式解析它,我该如何以非常简单的方式执行此操作并从中创建一个新文件?我想使用正则表达式而不是操纵 DOM 是有原因的。我需要评论才能转到新文件。

我也不想在 XML 文件中指定要删除的元素,可能会添加多个我不知道的元素。所以应该是:删除除根元素和 tasks 元素及其子元素和注释之外的所有元素。

初始文件:

<root attribute1="attribute">
    <tests>
        <test>Test 1</test>
        <test>Test 2</test>
    </tests>
    <tasks>
        <!--
        <task name="task one" >
            Some task that is commented
        </task>
        -->

        <task name="task one" >
            Some text
        </task>
    </tasks>
</root>

新文件:

<root attribute1="attribute">
    <tasks>
        <!--
        <task name="task one" >
            Some task that is commented
        </task>
        -->

        <task name="task one" >
            Some text
        </task>
    </tasks>
</root>

这是我使用 Gradle 函数的结果:

def extractXml() {
    def input = new File("initial_file.xml")
    
    if (input.exists()) {
        def doc = DOMBuilder.parse(new StringReader(input.text))
        def rootElement = doc.documentElement

        use(DOMCategory) {
            String xmlEventContent = rootElement as String
            new File("new_file.xml").write(xmlEventContent)
        }
    }
}

也许这更接近您想要的?

def extractXml() {
    def input = new File("initial_file.xml")
    
    if (input.exists()) {
        def doc = DOMBuilder.parse(new StringReader(input.text)).documentElement
        use(DOMCategory) {
            doc.each {
                if (it.nodeName != 'tasks' && it.nodeName != '#text') {
                    doc.removeChild(it)
                }
            }
            String xmlEventContent = doc as String
            new File("new_file.xml").write(xmlEventContent)
        }
    }
}

任何避免使用正则表达式的东西