我有一个groovy脚本,它将XML响应与JDBC查询进行比较。我试图考虑一个场景,我需要根据元素中的特定属性验证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' && it.@ExtensionCode == 'QuestionSequence'}
obj.questionSequence = xml.FormResponse.OLifEExtension.{it.@ExtensionCode == '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?
提前感谢您的帮助。
答案 0 :(得分:1)
当然,在我提出这个问题后,我明白了。如果有人有更清洁的方法,我会很感激,但这似乎可以解决问题。
obj.questionSequence = xml.FormResponse.OLifEExtension.find{it.@ExtensionCode == 'QuestionSequence'}