我有一个以下格式的输入。我想循环使用MessageBody中的Error元素,并将响应消息作为单个文本构建,如下所示。可以帮助我。
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)
这是一个完整的解决方案:
<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