2016-11-08 143 views
0

我需要創建一個將響應消息轉換爲soap故障的xslt。 我試圖創建xslt,但結果並不如預期的那樣。在xslt轉換之後附加了Input,Expected Output,xslt和Result。你能幫忙嗎?XSLT轉換創建肥皂故障

輸入:

<response> 
        <metadata> 
        </metadata> 
        <message-body> 
         <errors> 
          <transaction-id>12345</transaction-id> 
          <claim-id>124545454</claim-id> 
          <suffix-id>545454</suffix-id> 
          <messages> 
           <message-id>123</message-id> 
           <message-type>E</message-type> 
           <message-description>Claim not found</message-description> 
          </messages> 
          <messages> 
           <message-id>256</message-id> 
           <message-type>M</message-type> 
           <message-description>Username not valid</message-description> 
          </messages> 
         </errors> 
        </message-body> 
    </response> 

預期輸出:

  <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"> 
         <soap:Header /> 
         <soap:Body> 
          <soap:Fault> 
           <soap:Code> 
            <soap:Value>soap:Sender</soap:Value> 
           </soap:Code> 
           <soap:Detail> 
             <soap:Text xml:lang="en">[E]100000:UserId Not Found;[M]100001:Source System Not Found</soap:Text> 
           </soap:Detail> 
          </soap:Fault> 
         </soap:Body> 
        </soap:Envelope> 

XSLT:

 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
     <xsl:output method="text"/> 
     <xsl:strip-space elements="*"/> 
      <xsl:template match="/"> 
        <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"> 
        <soap:Header /> 
        <soap:Body> 
         <soap:Fault> 
          <soap:Code> 
           <soap:Value>soap:Sender</soap:Value> 
          </soap:Code> 
          <soap:Detail> 
            <soap:Text xml:lang="en"><xsl:apply-templates/></soap:Text> 
          </soap:Detail> 
         </soap:Fault> 
        </soap:Body> 
       </soap:Envelope> 
      </xsl:template> 

      <xsl:template match="messages[position() > 1]"> 
      <xsl:text>,</xsl:text> 
      <xsl:apply-templates/> 
      </xsl:template> 

      <xsl:template match="messages/*"> 
      <xsl:value-of select="substring(';', 1, position() > 1)"/> 
      <xsl:value-of select="substring('[', 1, name()='message-id')"/> 
      <xsl:value-of select="."/> 
      <xsl:value-of select="substring(']', 1, name()='message-id')"/> 
      </xsl:template> 
     </xsl:stylesheet> 

結果:

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"> 
     <soap:Header/> 
     <soap:Body> 
      <soap:Fault> 
      <soap:Code> 
       <soap:Value>soap:Sender</soap:Value> 
      </soap:Code> 
      <soap:Detail> 
       <soap:Text xml:lang="en">12345124545454545454[123];E;Claim not found,[256];M;Username not valid</soap:Text> 
      </soap:Detail> 
      </soap:Fault> 
     </soap:Body> 
    </soap:Envelope> 

幫助表示讚賞

+0

您剛剛在您的帖子上銷燬了我的格式化工作。真。注意編輯器的工作方式。創建格式正確的帖子並不難。 – Tomalak

+0

嗨Tomalak,道歉我正在格式化,我沒有注意到你的意見。 – Ravi

+0

編輯告訴你什麼時候別人編輯了你的帖子,所以不可能是你沒注意到的。下一次:請在覆蓋編輯之前查看。無論如何,現在格式化沒問題,我沒有更多的反對意見。 – Tomalak

回答

0

一錯配

下面這段代碼是錯誤的:

<soap:Detail> 
    <soap:Text xml:lang="en"><xsl:apply-templates/></soap:Text> 
</soap:Detail> 

您的上下文節點爲 「/」,讓您的文檔節點。你將處理整個input-xml(只要沒有匹配的模板,它不會處理更多的子元素)。有了背景知識,xslt得到了一個默認的複製文本到輸出技術,你的元素會得到錯誤的內容。

建議的修改:

<soap:Detail> 
    <soap:Text xml:lang="en"><xsl:apply-templates select="/response/message-body/errors/messages"/></soap:Text> 
</soap:Detail> 

II。錯誤的輸出方法:

<xsl:output method="text"/> 

只會輸出文本字符串。將方法更改爲xml