将多个输入元素映射到单个输出响应元素,以逗号分隔

时间:2016-03-25 06:19:34

标签: xslt xslt-1.0

我试图将XSD中处于同一级别的多个输入映射到目标元素作为逗号分隔值。这可以在XSLT 1.0中实现吗

输入结构

<Errors>
<error>
<errorcode>code</errorcode>
<errortype>type</errortype>
<paramater1>error1</paramater1>
<paramater2>error2</paramater2>
<paramater3/>error3</paramater3>
<paramater4/>error4</paramater4>
<error>
<Errors>

输出

<output>error1,error2,error3,error4</output>

请注意 - 其他元素如errorcode,errortype应该保持不变..我在其他映射中使用它们。

1 个答案:

答案 0 :(得分:0)

您可以尝试使用这些模板:

<xsl:template match="error">
    <xsl:copy>
        <!-- apply identity transform for child elements which name doesn't start with 'parameter' -->
        <xsl:apply-templates select="*[not(starts-with(name(), 'paramater'))]"/>

        <!-- output comma-separated value from child elements which name start with 'parameter' -->
        <output>
            <xsl:for-each select="*[starts-with(name(), 'paramater')]">
                <xsl:value-of select="."/>
                <xsl:if test="position() &lt; last()">
                    <xsl:text>,</xsl:text>
                </xsl:if>
            </xsl:for-each>
        </output>
    </xsl:copy>
</xsl:template>

<!-- identity template -->
<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
</xsl:template>