2016-11-04 125 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