在使用Groovy进行语法分析时,无法在不使用命名空间的情况下解析xml属性

时间:2017-01-09 06:43:49

标签: xml groovy xml-parsing xml-namespaces xmlslurper

我有一个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之前,我想验证是否输入&#39; multiRef代码中的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后它就停止了工作

我使用groovy 1.8解析它的方式是:

def xml = new XmlSlurper(factory.newSAXParser().getXMLReader()).parseText(xmlMsg)
idModel = xml.Body.multiRef.@type.text()

PS: - 我在处理xmls方面相当新颖

0 个答案:

没有答案