2011-12-08 22 views
0

GPathResultは各反復で同じノードのリストを返します。次の例に示すように、1つの反復からノードを挿入して、次のノードにノードを見つける方法はありますか?ノードをGPathResultに挿入するにはどうすればよいですか?

def messageNodes = [] as HashSet 
def inputRoot = new XmlSlurper().parse(xmlFile) 
inputRoot.testsuite.list().each { suiteNode -> 
    suiteNode.children().list().each { caseNode -> 
    caseNode.children().list().each { messageNode -> 
     messageNodes << messageNode 
    } 
    } 
} 

inputRoot.testsuite.list().each { suiteNode -> 
    suiteNode.children().list().each { caseNode -> 
    caseNode.children().list().each { messageNode -> 
     assert messageNodes.contains(message) 
    } 
    } 
} 

答えて

0

このコードではありませんinsertingノードである...しかし、そのままで、それは...

のいずれかによる方法に XmlSlurper作品を動作しません(ノードはスキャンの間で同じです見つけようとして)

GPathResultchildren()を呼び出すと、新しいインスタンスNodeChildを返すイテレータが生成されます。私はそれを信じ

def messageNodes = [] 
def inputRoot = new XmlParser().parse(xmlFile) 
inputRoot.testsuite.'*'.'*'.each { messageNode -> 
    messageNodes << messageNode 
} 

inputRoot.testsuite.'*'.'*'.each { messageNode -> 
    println messageNode.hashCode() 
    assert messageNodes.contains(messageNode) 
} 

:これらは新しいインスタンスがあるので、あなたがそうのようなXmlParserを使用するようにコードを変更した場合

(そのhashcodeは異なるものになるよう)、彼らはあなたがそれらを見た最後の時間を比較することはできませんあなたが期待通りに動作し、あなたがラインに変更することができますさらにとして

(私はあなたがそれが問題であったものたちを示さなかったとして、しかし、あなたのxml形式で推測しなければならなかった)

inputRoot.testsuite.'*'.'*'.each { messageNode -> 
    messageNodes << messageNode 
} 

はまたXmlSlurperが航行可能な方法で内部状態を保存しないので、あなたは、ノードを追加する場合、あなたがない限り、それらを見つけることができないことに留意すべきである...同じ機能のための

messageNodes.addAll(inputRoot.testsuite.'*'.'*') 

へあなたはxmlを書き出してそれを読み戻します。これがあなたが目指しているものなら、おそらく XmlParserがより良いルートかもしれません

関連する問題