如何使用 XmlSlurper 通过标签和属性在 Groovy 中查找所有元素
How to find all elements by a tag and attribute in Groovy using XmlSlurper
我们有一个 xml 如下所示
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<GeneratorRun>
<param>
<comGrp name="Abc">
<component name="A">
<genFiles>
<file location="xyz/a/b/x.h" checksum="1558926677"/>
<file location="xyz/a/b/y.h" checksum="2621886660"/>
</genFiles>
</component>
<component name="B">
<genFiles>
<file location=""xyz/a/b/z.h" checksum="1558926677"/>
</genFiles>
</component>
</comGrp>
</param>
我需要获取 genFiles 下的所有文件位置信息。有什么相同的表现。
我目前尝试的是下面没有给出结果的
GPathResult xmlContent = new XmlSlurper().parse(config.genSourceRootDir.resolve('par.xml').toFile())
List<String> generatedFiles = xmlContent.'**'.genFiles.file.@location.toList()
您需要先找到节点,然后查询它们的属性
像这样:
List<String> generatedFiles = xmlContent.'**'
.findAll { it.name() == 'genFiles' }
.file*.collectMany { [it.@location] }.flatten()
我们有一个 xml 如下所示
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<GeneratorRun>
<param>
<comGrp name="Abc">
<component name="A">
<genFiles>
<file location="xyz/a/b/x.h" checksum="1558926677"/>
<file location="xyz/a/b/y.h" checksum="2621886660"/>
</genFiles>
</component>
<component name="B">
<genFiles>
<file location=""xyz/a/b/z.h" checksum="1558926677"/>
</genFiles>
</component>
</comGrp>
</param>
我需要获取 genFiles 下的所有文件位置信息。有什么相同的表现。
我目前尝试的是下面没有给出结果的
GPathResult xmlContent = new XmlSlurper().parse(config.genSourceRootDir.resolve('par.xml').toFile())
List<String> generatedFiles = xmlContent.'**'.genFiles.file.@location.toList()
您需要先找到节点,然后查询它们的属性
像这样:
List<String> generatedFiles = xmlContent.'**'
.findAll { it.name() == 'genFiles' }
.file*.collectMany { [it.@location] }.flatten()