2017-04-07 88 views
0

我有一个将XML响应与JDBC查询进行比较的groovy脚本。我试图说明一个场景,我需要根据元素中的特定属性验证XML值。在Groovy中,如何获取具有XML中特定属性的元素中的值

这里是XML的例子:

   <FormInstance id="Impairment_0111235228_2_174_477"> 
       <FormName>NEW MEDICAL HISTORY NOTE</FormName> 
       <ProviderFormNumber>174</ProviderFormNumber> 
       <FormResponse id="Imapairment_477_6"> 
       <QuestionNumber>477</QuestionNumber> 
       <QuestionText>ExamOne Rx</QuestionText> 
       <AnswerChoice> 
        <AnswerChoiceText>ExamOne Result</AnswerChoiceText> 
        <OLifEExtension VendorCode="08" ExtensionCode="ImpairmentAttributeType">LBL</OLifEExtension> 
        <OLifEExtension VendorCode="08" ExtensionCode="ImpairmentAttributeSeq">2</OLifEExtension> 
       </AnswerChoice> 
       <OLifEExtension VendorCode="08" ExtensionCode="ImpairmentSequence">1</OLifEExtension> 
       <OLifEExtension VendorCode="08" ExtensionCode="QuestionSequence">6</OLifEExtension> 
       </FormResponse> 
      </FormInstance> 

正如你所看到的,有几个元素的名称为“OLifEExtension”,但具有独特ExtensionCode属性。我需要能够比较值的属性。例如,使用上面的XML,如果属性ExtensionCode = QuestionSequence,我希望看到的6

值我试图在我的脚本执行以下操作:

obj.questionSequence = xml.FormResponse.OLifEExtension.{'@ExtensionCode' == 'QuestionSequence'} 

    obj.questionSequence = xml.FormResponse.{it.name() == 'OLifEExtension' && [email protected] == 'QuestionSequence'} 

    obj.questionSequence = xml.FormResponse.OLifEExtension.{[email protected] == 'QuestionSequence'} 

的语法上的所有3个例子似乎是正确的,因为我在运行脚本时没有遇到任何错误,但是当我输出结果时,它总是空的。

我也试过:

obj.questionSequence = xml.FormResponse.OLifEExtension[1] 

这工作,但这里的问题是,QuestionSequence可能不会在同一个地点始终存在。它可能是位置0或2.所以,我真的需要它来处理属性名称。

此外,我正在使用的脚本的基础是对这个问题的回应,如果这是任何人都需要。

Compare JDBC Response to an XML Response where number of nodes vary and order could change?

预先感谢您的任何帮助。

回答

1

当然,在我问这个问题之后,我知道了。如果有人有一个更清洁的方式来做到这一点,我将不胜感激,但这似乎是一个窍门。

obj.questionSequence = xml.FormResponse.OLifEExtension.find{[email protected] == 'QuestionSequence'}  
相关问题