【发布时间】:2016-12-29 07:04:24
【问题描述】:
我有一个 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 标签中的“类型”是否为IdentityModel
我尝试如下访问type,但没有成功:-
def vixId = xml.Body.multiRef.@type.text()
请注意,我可以使用以下方式访问multiRef 标签中的id:-
def vixId = xml.Body.multiRef.@id.text()
请帮助我在multiRef标签中访问type
编辑:
请注意,我想解析 multiRef 标签中的 type 而不使用像 multiRef.'@xsi:type' 这样的名称空间,因为我的 namespace 可能会改变。我想要的是multiRef标签有一个属性type,它的值是IdentityModel..只有当它存在时,我才想阅读vixId。
另请注意,在 groovy 1.8 中,我使用 multiRef.@type 在没有命名空间的情况下解析它,但自从我将 groovy 更新到 2.4.7 后它就停止工作了
PS:- 我在处理 xmls 方面相当新
【问题讨论】:
-
xml.Body.multiRef.'xsi:@type'.text()? -
@har07 : 不,但是
xml.Body.multiRef.'@xsi:type'.text()返回了ns9:IdentityModel.... 感谢您的帮助,如果有任何方法可以只获得IdentityModel作为响应...如果现在,我将使用字符串操作来实现它:D .. 谢谢 -
啊,错字。我就是这个意思
标签: xml groovy xml-parsing xmlslurper