在Groovy中,如何获取XML中具有特定属性的元素中的值

时间:2017-04-07 17:07:49

标签: xml groovy

我有一个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?

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

当然,在我提出这个问题后,我明白了。如果有人有更清洁的方法,我会很感激,但这似乎可以解决问题。

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