0

FXCop XML を解析して、関連する「レベル」属性の値を持つすべての「問題...」タグのコレクションを取得しようとしています。私はGroovyに非常に慣れていないので、これにつまずいています。FXCop XML のスキーマは非常に複雑で、"Issues..." タグがスキーマのいくつかのレベルで表示される場合があります。私はそれを「ブルートフォース」して各レベルで個別の検索をコーディングできると思いますが、分析されているより複雑なプログラムでは最終的に問題になる可能性があります。

各サブツリーで GPath 検索を手動でコーディングすることなく、XML ドキュメントからすべての「Issues ...」タグを取得する簡単な (比較的) 方法はありますか?

どんな助けでも大歓迎です。

4

1 に答える 1

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' ]
于 2014-02-12T20:08:15.127 に答える