2015-04-21 167 views
0

我正在尝试使用java获取XML对象的值。从XML对象获取值

我的XML源

<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"> 
    <soapenv:Body> 
     <qde:invokeResponse xmlns:qde="http://qde.service.los"> 
      <qde:return> 
       <ns1:data xmlns:ns1="http://to.service.los/xsd"> 
        <![CDATA[<?xml version="1.0" encoding="UTF-8"?> 
          <Application> 
           <RefNumber>100</RefNumber> 
           <Number>100</Number> 
           <StatusCode>142</StatusCode> 

          </Application>]]></ns1:data> 
       <ns1:errorCode xmlns:ns1="http://to.service.los/xsd">WCP_QUERY_WS_06</ns1:errorCode> 
     <ns1:errorMessage xmlns:ns1="http://to.service.los/xsd">Interface Error Occured, Application moved to Error Technical Queue.</ns1:errorMessage> 
    </qde:return> 
     </qde:invokeResponse> 
    </soapenv:Body> 
</soapenv:Envelope> 

我试图获取应用程序对象。

我的代码

def rootnode = new XmlParser().parseText(responseXml); 
def rtn = rootnode.'soapenv:Body'.'qde:invokeResponse'.'qde:return'.'ns1:data'; 

LOG.info("Return value iss:"+rtn); 

这是打印以下

[{http://to.service.los/xsd}data[attributes={}; 
    value= 
     [<?xml version="1.0" encoding="UTF-8"?> 
    <Application> 
     <LeadRef>100</LeadRef> 
    <Number>101</Number> 
    <StatusCode>142</StatusCode> </Application>]]] 

我只是想获取LeadRef,数&的StatusCode

+0

您的XML来源和发布的输出看起来不一样。请确保输出和源xml具有相同的数据?那么,我们可以提供一些指导 – Sridhar

+0

@Sridhar更新了这个问题。 – Syed

回答

1

你需要调用text()方法:

def rtn = rootnode.'soapenv:Body'.'qde:invokeResponse'.'qde:return'.'ns1:data'.text(); 
LOG.info("Return value iss:"+rtn); 

此打印如下:

<?xml version="1.0" encoding="UTF-8"?> 
         <Application> 
          <RefNumber>100</RefNumber> 
          <Number>100</Number> 
          <StatusCode>142</StatusCode> 

         </Application> 

现在你可以再次处理此XML:

def xml = '<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope">\n' + 
    ' <soapenv:Body>\n' + 
    '  <qde:invokeResponse xmlns:qde="http://qde.service.los">\n' + 
    '   <qde:return>\n' + 
    '    <ns1:data xmlns:ns1="http://to.service.los/xsd">\n' + 
    '     <![CDATA[<?xml version="1.0" encoding="UTF-8"?>\n' + 
    '       <Application>\n' + 
    '        <RefNumber>100</RefNumber>\n' + 
    '        <Number>100</Number>\n' + 
    '        <StatusCode>142</StatusCode>\n' + 
    '\n' + 
    '       </Application>]]></ns1:data>\n' + 
    '     <ns1:errorCode xmlns:ns1="http://to.service.los/xsd">WCP_QUERY_WS_06</ns1:errorCode>\n' + 
    '  <ns1:errorMessage xmlns:ns1="http://to.service.los/xsd">Interface Error Occured, Application moved to Error Technical Queue.</ns1:errorMessage>\n' + 
    '  </qde:return>\n' + 
    '  </qde:invokeResponse>\n' + 
    ' </soapenv:Body>\n' + 
    '</soapenv:Envelope>' 
def rootnode = new XmlParser().parseText(xml); 
def rtn = rootnode.'soapenv:Body'.'qde:invokeResponse'.'qde:return'.'ns1:data'; 
def application = new XmlParser().parseText(rtn.text()) 
println application.'RefNumber'.text() 

结果:

100 

更多信息,请参见http://www.groovy-lang.org/processing-xml.html

+0

谢谢Wim ..但是,我想提取Application对象和内部对象.. – Syed

+0

您可以再次使用XmlParser。我会更新答案。 –

+0

这是行不通的Wim :( – Syed