我认为以下内容可以完成工作(与元素的子元素的数量和名称无关xml
):
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:key name="name" match="xml/*" use="local-name()"/>
<xsl:variable name="first" select="xml/*[generate-id() = generate-id(key('name', local-name())[1])]"/>
<xsl:template match="xml">
<xsl:apply-templates select="$first[1]" mode="init"/>
</xsl:template>
<xsl:template match="xml/*" mode="init">
<xsl:apply-templates select="key('name', local-name())" mode="line"/>
</xsl:template>
<xsl:template match="xml/*" mode="line">
<xsl:variable name="pos" select="position()"/>
<xsl:text>line: </xsl:text>
<xsl:for-each select="$first">
<xsl:if test="position() > 1"><xsl:text> + </xsl:text></xsl:if>
<xsl:apply-templates select="key('name', local-name())[$pos]"/>
</xsl:for-each>
<xsl:text> </xsl:text>
</xsl:template>
<xsl:template match="xml/*">
<xsl:value-of select="."/>
</xsl:template>
</xsl:stylesheet>