2016-11-04 128 views
1

我有一個以下格式的輸入。我想循環與MessageBody中的錯誤元素並將響應消息作爲單個文本框架如下所示。可以幫我它。XSLT循環XML元素和幀單個文本

Input: 

<Response> 
<Header> 
</Header> 
<Messagebody> 
<Error> 
<ErrorCode>E</ErrorCode> 
<ErrorId>100000</ErrorId> 
<ErrorDescription>UserId Not Found</ErrorDescription> 
</Error> 
<Error> 
<ErrorCode>M</ErrorCode> 
<ErrorId>100001</ErrorId> 
<ErrorDescription>Source System Not Found</ErrorDescription> 
</Error> 
</Messagebody> 
</Response> 

Expected Output: 

<Response> 
<Fault> 
<Text>[E];100000;UserId Not Found,[M];100001;Source System Not Found</Text> 
</Fault> 
</Response> 
+0

你究竟在哪裏堅持這個? –

+0

嗨邁克爾,Iam新來XSLT可以請你告訴我我如何實現我? – Ravi

回答

0

這裏是一個完整的解決方案

<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="/"> 
     <Response> 
      <Fault> 
      <Text><xsl:apply-templates/></Text> 
      </Fault> 
     </Response> 
    </xsl:template> 

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

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

當這個變換所提供的XML文檔施加:

<Response> 
    <Header></Header> 
    <Messagebody> 
     <Error> 
      <ErrorCode>E</ErrorCode> 
      <ErrorId>100000</ErrorId> 
      <ErrorDescription>UserId Not Found</ErrorDescription> 
     </Error> 
     <Error> 
      <ErrorCode>M</ErrorCode> 
      <ErrorId>100001</ErrorId> 
      <ErrorDescription>Source System Not Found</ErrorDescription> 
     </Error> 
    </Messagebody> 
</Response> 

有用,正確的結果產生

[E];100000;UserId Not Found,[M];100001;Source System Not Found 
+0

非常感謝Dimitre.This是我需要的,我會看看培訓課程。 – Ravi