2017-05-09 26 views
0

xml内の'ExtranetContract'という属性を探して、その属性が存在し、その値が ' true'XMLから属性のすべてのインスタンスを取得する方法

def DailyContracts = xml.'soap:Body' 
       .TestResponse 
       .TestContractType 
       .DailyContracts 

def ContractType = DailyContracts.findAll { [email protected] == "C"} 

def ExtranetContract = ContractType.DailyContract[0][email protected] 

assert ExtranetContract.size() > 0 && ExtranetContract.every { it == 'true' } 

行:def ExtranetContract = ContractType.DailyContract[0][email protected]に注目してください。 [0]は、接触型は'C'に等しいDailyContractの最初のインスタンスを(表します。

私は契約タイプ'C'下に2件の以上のエクストラネット契約を持っている場合、それが動作する場合、私はわからない(私はテストする例を得たhave't自分自身が、私は上記のコード行は、すべてのエクストラネット契約を確認するには効果的に動作しないことがどこに例を示すようにダミーのXMLを作成している私の質問は、単にある

<Contracts> 
<DailyContracts Type="S"> 
    <DailyContract Type="TEST" Code="xxx"> 
     <Name>Extranet</Name> 
    </DailyContract> 
    </DailyContracts> 
<DailyContracts Type="C"> 
    <DailyContract Type="TEST" Code="xxx" ExtranetContract="true"> 
    <Name>Test Hotel 1</Name> 
    </DailyContract> 
    <DailyContract Type="TEST" Code="xxx" ExtranetContract="true"> 
    <Name>Test Hotel 2</Name> 
    </DailyContract> 
</DailyContracts> 
</Contracts> 

は、どのように私はそれをチェックしている[0]を置き換えることができます属性すべてのエクストラネット契約は[0].findAllとに置き換えようとしましたでも運はありません。

答えて

0

次の行にそれを試すことができます。

def ExtranetContract = ContractType.DailyContract[0][email protected] 

はあなたにFilteredNodeChildrenのインスタンスを提供します。このクラスはIterableのインスタンスなので、spread演算子を使用できます。

import groovy.util.XmlSlurper 

def input = '''<Contracts> 
<DailyContracts Type="S"> 
    <DailyContract Type="FIT" Code="xxx" Start="2017-08-15" Days="7"> 
     <Name>Extranet</Name> 
    </DailyContract> 
    </DailyContracts> 
<DailyContracts Type="C"> 
    <DailyContract Type="FIT" Code="xxx" Start="2017-08-15" Days="7" ExtranetContract="true"> 
    <Name>Melia Costa Del Sol Extranet</Name> 
    </DailyContract> 
    <DailyContract Type="FIT" Code="xxx" Start="2017-08-15" Days="7" ExtranetContract="true"> 
    <Name>Melia Costa Del Sol Extranet 2</Name> 
    </DailyContract> 
</DailyContracts> 
</Contracts>''' 

def slurped = new XmlSlurper().parseText(input) 

def ContractType = slurped.DailyContracts.findAll { [email protected] == "C"} 

def ExtranetContract = ContractType.DailyContract*[email protected] 

assert ExtranetContract.size() == 2 && ExtranetContract.every { it == 'true' } 
1

は、あなたは以下のようにそれを行う:

//Pass the response as String to parseText method 
def xml = new XmlSlurper().parseText(response) 
//Get the Daily Contracts of type C 
def contracts = xml.'**'.findAll { it.name() == 'DailyContracts' && [email protected] == 'C'} 
//Get the ExtranetContract values 
def eCon = contracts.DailyContract*[email protected] 
assert eCon instanceof List 
assert !(false in eCon) 

は、あなたはすぐにオンラインDemo

関連する問題