2016-08-11 56 views
0

的XSL轉換失敗下面是一個XML響應我從服務中獲得我created-,因爲命名空間

<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsa="http://www.w3.org/2005/08/addressing"> 
     <env:Header> 
      <wsa:MessageID>urn:3474700f-5fc9-11e6-ba99-00144ff9e607</wsa:MessageID> 
      <wsa:ReplyTo> 
      <wsa:Address>http://www.w3.org/2005/08/addressing/anonymous</wsa:Address> 
      <wsa:ReferenceParameters> 
       <instra:tracking.ecid xmlns:instra="http://xmlns.oracle.com/sca/tracking/1.0">fc5bd4a9-5dea-4f03-bef5-b62057ff17d5-00055065</instra:tracking.ecid> 
       <instra:tracking.FlowEventId xmlns:instra="http://xmlns.oracle.com/sca/tracking/1.0">280018</instra:tracking.FlowEventId> 
       <instra:tracking.FlowId xmlns:instra="http://xmlns.oracle.com/sca/tracking/1.0">140005</instra:tracking.FlowId> 
       <instra:tracking.CorrelationFlowId xmlns:instra="http://xmlns.oracle.com/sca/tracking/1.0">0000LPtpMnV4Muk_Ox5Eid1Ncr^i000006</instra:tracking.CorrelationFlowId> 
      </wsa:ReferenceParameters> 
      </wsa:ReplyTo> 
      <wsa:FaultTo> 
      <wsa:Address>http://www.w3.org/2005/08/addressing/anonymous</wsa:Address> 
      </wsa:FaultTo> 
     </env:Header> 
     <env:Body> 
      <SCOR_SCORING_RES> 
      <TABLE> 
       <RESULT> 
        <CALC_MAX_REPAYMENT_CLIENT>100000</CALC_MAX_REPAYMENT_CLIENT> 
        <INTERNAL_CREDIT_RATING_CD>3</INTERNAL_CREDIT_RATING_CD> 
        <OUTCOME_CD>Good</OUTCOME_CD> 
        <CALC_MAX_LIMIT_ALTERN>50000</CALC_MAX_LIMIT_ALTERN> 
       </RESULT> 
      </TABLE> 
      </SCOR_SCORING_RES> 
     </env:Body> 
    </env:Envelope> 

我想在這個XML應用XSLT和獲取數據。 我寫了一個小的XSLT代碼 -

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
<xsl:template match="Envelope"> 
      <xsl:value-of select="Body/SCOR_SCORING_RES/TABLE/RESULT/CALC_MAX_REPAYMENT_CLIENT"/>~ 
</xsl:template> 
</xsl:stylesheet> 

但結果XML並沒有給我的標籤CALC_MAX_REPAYMENT_CLIENT的價值,但下面的結果是所有的標籤值響應XML的

urn:3474700f-5fc9-11e6-ba99-00144ff9e607http://www.w3.org/2005/08/addressing/anonymousfc5bd4a9-5dea-4f03-bef5-b62057ff17d5-000550652800181400050000LPtpMnV4Muk_Ox5Eid1Ncr^i000006http://www.w3.org/2005/08/addressing/anonymous1000003Good50000 

從我對XSLT和XPATH知之甚少,Body/SCOR_SCORING_RES/TABLE/RESULT/CALC_MAX_REPAYMENT_CLIENT應該只返回一個值。請讓我知道我做錯了什麼。

回答

1

這是名稱空間的問題。 EnvelopeBody元素位於輸入XML中的名稱空間中,但您尚未在XSLT中說明該元素。在你的XSLT中,你試圖匹配沒有空間的Envelope,這不是一回事。

試試這個XSLT

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" 
       xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"> 

    <xsl:template match="env:Envelope"> 
    <xsl:value-of select="env:Body/SCOR_SCORING_RES/TABLE/RESULT/CALC_MAX_REPAYMENT_CLIENT"/> 
    </xsl:template> 
</xsl:stylesheet> 
+0

謝謝。這解決了它。 –

+0

原始代碼返回所有數據的原因是它沒有重寫默認的XSLT處理規則。添加一個'>'會阻止其他數據通過。 –