2013-08-23 126 views
2

我打電話嵌入響應XML作爲逃脫XML Web服務逃脫XML和UNESCAPE。我收到完整的SOAP響應,但只對'轉義的XML'部分感興趣()。檢索使用XSLT 1.0

我試圖寫一個XSL(1.0)來檢索逃脫XML和UNESCAPE,所以我可以通過其他非XSLT組件對其進行處理。

我已經嘗試了一些其他的解決方案,在StackOverflow中'unescaping',但沒有運氣。從Web服務

響應

<?xml version="1.0" encoding="UTF-8"?> 
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> 
    <s:Body> 
     <SendMessageResponse xmlns="http://www.company.com/CAIS"> 
      <SendMessageResult>&lt;?xml version="1.0"?&gt;&lt;IEXInboundServiceResponse&gt;&lt;IEXInboundServiceResponseVersion&gt;1.0&lt;/IEXInboundServiceResponseVersion&gt;&lt;ServiceResponse&gt;IEX_SUCCESS&lt;/ServiceResponse&gt;&lt;RequestMessageId&gt;22658651-024E-445B-96C1-94F027205E01&lt;/RequestMessageId&gt;&lt;/IEXInboundServiceResponse&gt;</SendMessageResult> 
     </SendMessageResponse> 
    </s:Body> 
</s:Envelope> 
進行反向轉義

<?xml version="1.0"?> 
<IEXInboundServiceResponse> 
    <IEXInboundServiceResponseVersion>1.0</IEXInboundServiceResponseVersion> 
    <ServiceResponse>IEX_SUCCESS</ServiceResponse> 
    <RequestMessageId>22658651-024E-445B-96C1-94F027205E01</RequestMessageId> 
</IEXInboundServiceResponse> 

當前XSLT後

所需的輸出,我使用

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" version="1.0" indent="yes" omit-xml-declaration="yes"/> 

    <xsl:template match="//SendMessageResult"> 
     <xsl:value-of select="." disable-output-escaping="yes" /> 
    </xsl:template> 

</xsl:stylesheet> 

幫助!

感謝

大衛

+1

您是否想要顯示您嘗試使用的XSL,以便我們可以幫助指出該區域進行更正? –

+0

嗨凱文,我編輯了原來的帖子,包括我一直使用的XSLT。 –

回答

2

的問題是對付你正在使用的命名空間。首先,您尚未在XSLT中聲明http://www.company.com/CAIS namspace。您可以通過將第一行更改爲:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
       xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" 
       xmlns:c="http://www.company.com/CAIS"> 

請注意最後的命名空間。我嘗試了一個空白的命名空間,但它仍然存在與您一樣的問題。

然後更改模板開行到:

<xsl:template match="//c:SendMessageResult"> 

那麼就應該按預期工作。

+0

真棒,感謝樂高。像魅力一樣工作。乾杯,大衛。 –