XMLSlurper解析FXCop结果?

时间:2014-02-12 18:29:34

标签: xml groovy fxcop xmlslurper

我正在尝试解析FXCop XML以获取所有“Issues ...”标记的集合,其中包含相关“Level”属性的值。我对Groovy很新,所以我对这个问题感到磕磕绊绊。 FXCop XML的模式非常复杂,“Issues ...”标签可以出现在模式的多个级别。我想我可以“强行”它并在每个级别编写单独的搜索,但这对于正在分析的更复杂的程序来说最终可能会出现问题。

是否有一种简单(相对)的方法可以从XML文档中检索所有“Issues ...”标记,而无需在每个子树上手动编写GPath搜索?

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

给出评论中的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' ]