我正在尝试解析 FXCop XML 以获取所有“问题...”标签及其相关“级别”属性值的集合。我对 Groovy 很陌生,所以我遇到了这个问题。FXCop XML 的架构非常复杂,“问题...”标签可以出现在架构中的多个级别。我想我可以“蛮力”它并在每个级别编写单独的搜索,但这对于正在分析的更复杂的程序最终可能会出现问题。
是否有一种简单(相对)的方法可以从 XML 文档中检索所有“问题 ...”标签,而无需手动编码 GPath 搜索每个子树?
任何帮助是极大的赞赏。
我正在尝试解析 FXCop XML 以获取所有“问题...”标签及其相关“级别”属性值的集合。我对 Groovy 很陌生,所以我遇到了这个问题。FXCop XML 的架构非常复杂,“问题...”标签可以出现在架构中的多个级别。我想我可以“蛮力”它并在每个级别编写单独的搜索,但这对于正在分析的更复杂的程序最终可能会出现问题。
是否有一种简单(相对)的方法可以从 XML 文档中检索所有“问题 ...”标签,而无需手动编码 GPath 搜索每个子树?
任何帮助是极大的赞赏。
鉴于您评论中的 xml:
def x = '''<?xml version="1.0" encoding="utf-8"?>
|<FxCopReport Version="11.0">
| <Namespaces>
| <Namespace Name="RWSTestXDT">
| <Messages>
| <Issue Name="Namespace" Certainty="85" Level="Error"></Issue>
| </Messages>
| </Namespace>
| </Namespaces>
| <Targets>
| <Target>
| <Modules>
| <Module Name="rwstestxdt.dll">
| <Messages>
| <Issue Name="NoStrongName" Certainty="95" Level="CriticalError"></Issue>
| </Messages>
| </Module>
| </Modules>
| </Target>
| </Targets>
|</FxCopReport>'''.stripMargin()
你可以做:
List<String> levels = new XmlSlurper().parseText( x )
.'**'
.findAll { it.name() == 'Issue' }
.collect { it.@Level.text() }
获取列表:
[ 'Error', 'CriticalError' ]