Попробуйте следующее (с префиксом 'x', связанным с пространством имен xhtml)
<xsl:template match="THE-VALUE/x:div">
<xsl:for-each-group select="*" group-starting-with="x:h1">
<xsl:element name="{translate(current-group()[1], ' ', '')}">
<xsl:value-of select="current-group()[2]"/>
</xsl:element>
</xsl:for-each-group>
</xsl:template>
На самом деле для этого не требуется группировка: вы также можете сделать <xsl:for-each select="h1">
, а затем сослаться на два элемента в группе как .
и following-sibling::p[1]
соответственно. То есть:
<xsl:template match="THE-VALUE/x:div">
<xsl:for-each select="x:h1">
<xsl:element name="{translate(., ' ', '')}">
<xsl:value-of select="following-sibling::*[1]"/>
</xsl:element>
</xsl:for-eac>
</xsl:template>
Последнее решение будет работать в XSLT 1.0.