我有一个xml响应,如下所示: -
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<multiRef xmlns:ns9="http://hero.ar.vixo.in" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" id="id2" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns9:IdentityModel">
<vixId xsi:type="xsd:int">13364719</vixId>
</multiRef>
</soapenv:Body>
</soapenv:Envelope>
此回复存储在String
名称xmlMsg
中
我试图按如下方式解析它: -
def xml = new XmlSlurper().parseText(xmlMsg);
def vixId = xml.Body.multiRef.vixId.text()
但问题是,在阅读vixId
之前,我想验证multiRef
代码中的'type'是IdentityModel
我尝试按以下方式访问type
,但徒劳无功: -
def vixId = xml.Body.multiRef.@type.text()
请注意,我可以使用以下方式访问id
代码中的multiRef
: -
def vixId = xml.Body.multiRef.@id.text()
请帮助我访问type
代码
multiRef
编辑:
请注意,我想解析type
标记中的multiRef
,而不使用multiRef.'@xsi:type'
之类的名称空间,因为我的namespace
可能会发生变化。我想要的是multiRef
标记的属性type
,其值为IdentityModel
..只有在那里,我才能阅读vixId
。
另请注意,使用groovy 1.8我正在使用multiRef.@type
解析它而不使用命名空间但是自从我将groovy更新为2.4.7后它就停止了工作
PS: - 我在处理xmls方面相当新颖
答案 0 :(得分:1)
答案 1 :(得分:0)
我找不到我想要的东西,但我暂时使用了临时解决方法: -
if (xml.Body.multiRef.attributes().toString().contains("IdentityModel")) {
vixId = xml.Body.multiRef.vixId.text()
}
此处attributes()
方法将提供所有属性,其命名空间和值