我试图将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应该保持不变..我在其他映射中使用它们。
答案 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() < 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>