2014-09-15 3 views
0

I am Usig wso2esb 4.8.1, Я хочу удалить сложный элемент в своих данных ответа с помощью xquery или xpath.Как удалить сложный элемент В ответной части

<soapenv:Body> 
     <open:reponce xmlns:open="http://www.openuri.org/"> 
     <env:hjEnvelope xmlns:env="http://hj.mn.mw/Envelope"> 
      <env:UserId>as</env:UserId> 
      <env:Sender>as</env:Sender> 
      <env:MessageId>22195544</env:MessageId> 
      <env:CorrelationId>1</env:CorrelationId> 
      <env:GenTimeStamp>1</env:GenTimeStamp> 
      <env:SentTimeStamp>1</env:SentTimeStamp> 
      <env:Payload> 
       <MOP xmlns="http://hj.mn.mw/MOP" xmlns:ns2="http://www.openuri.org/"> 
        <Response> 
        <Result_OutputData> 
         <resultCode>0</resultCode> 
         <reference_ID>90</reference_ID> 
        </Result_OutputData> 
        <Response_OutputData> 
         <SystemName>google</SystemName> 
         <InterfaceName>nip</InterfaceName> 
         <ResultCode>0</ResultCode> 
         <ResultMessage/> 
         <ReferenceID>90</ReferenceID> 
        </Response_OutputData> 
        </Response> 
       </MOP> 
      </env:Payload> 
     </env:hjEnvelope> 
     </open:reponce> 
    </soapenv:Body> 
</soapenv:Envelope> 

Я хочу, чтобы удалить Response_OutputData тег для этого я попробовал с этим свойством XPATH

//*[not(local-name()='Response_OutputData')] 

, но его не working.Even я попытался с моим XQuery также, что тоже не работает

изменения XQUERY являются

<x xmlns="http://ws.apache.org/ns/synapse"> 
declare namespace soapenv = "http://schemas.xmlsoap.org/soap/envelope"; 
declare namespace soap="http://schemas.xmlsoap.org/soap/envelope/"; 
declare namespace open="http://www.openuri.org/"; 
declare namespace env="http://eai.bo.mw/Envelope"; 
declare variable $Response as document-node() external; 
declare variable $hjEnvelope as document-node() external; 
element{'open:reponce'}{ 
element{'env:hjEnvelope'}{$hjEnvelope//env:hjEnvelope/*[not(local-name()='Payload')], 
element{'env:Payload'}{ 
$Response//soap:Body/*[1]/*[not(local-name()='Response_OutputData')] 
    }} 
    } 

Как бы я удалить сложный элемент этого réponse

+0

для вышеуказанного запроса я получаю над ответом, я хочу удалить сложный элемент – user3595078

ответ

0

Вы должны выполнить тождественное преобразование где вы копируете все от входа к выходу, кроме того элемента, который вы хотите пропустить. Например:

xquery version "1.0"; 

declare namespace soapenv = "http://schemas.xmlsoap.org/soap/envelope"; 

declare function local:filter($nodes as node()*, $names as xs:string+) { 
    for $n in $nodes 
    return 
     typeswitch($n) 
      case element() return 
       if(not(local-name($n) = $names))then 
        element {node-name($n)} { 
         local:filter($n/(@*|child::node()), $names) 
        } 
       else() 

      default return 
       $n 
}; 


local:filter(/soapenv:body, ("Response_OutputData")) 
Смежные вопросы