Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
XSLT循环XML元素并构建单个文本_Xml_Xslt - Fatal编程技术网

XSLT循环XML元素并构建单个文本

XSLT循环XML元素并构建单个文本,xml,xslt,Xml,Xslt,我有一个以下格式的输入。我想循环MessageBody中的Error元素,并将响应消息框成一个文本,如下所示。你能帮我一下吗 Input: <Response> <Header> </Header> <Messagebody> <Error> <ErrorCode>E</ErrorCode> <ErrorId>100000</ErrorId> <ErrorDescription&g

我有一个以下格式的输入。我想循环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>
输入:
E
100000
找不到用户ID
M
100001
找不到源系统
预期产出:
[E] );100000;找不到用户ID,[M];100001;找不到源系统

这里有一个完整的解决方案

<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>
<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

这里有一个完整的解决方案

<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>
<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

你到底在哪里?嗨,迈克尔,我是XSLT新手,你能告诉我我该怎么做吗?你到底在哪里做?嗨,迈克尔,我是XSLT新手,你能告诉我我该怎么做吗?非常感谢迪米特里。这是我需要的,我会看看培训课程。非常感谢迪米特里。这就是我需要的,我会看看培训课程。