Как уже упоминалось в комментариях, ваш первый шаблон должен соответствовать resultSet
.Выполнение /Record
будет соответствовать любому, только если Record
был корневым элементом, а это не так.
Кроме того, в вашем втором шаблоне отсутствует закрывающий </xsl:element>
, хотя это может быть опечаткой.Но в любом случае вам все равно нужно добавить создание элемента Orders
и скопировать существующий OrderID
.
Попробуйте этот XSLT 1.0
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="1.0">
<xsl:output indent="yes"/>
<xsl:key name="groups" match="Record" use="OrderID" />
<xsl:template match="/resultSet">
<xsl:apply-templates select="Record[generate-id() = generate-id(key('groups', OrderID)[1])]"/>
</xsl:template>
<xsl:template match="Record">
<Orders>
<xsl:copy-of select="OrderID" />
<xsl:for-each select="key('groups', OrderID)">
<xsl:element name="{AttributeName}">
<xsl:value-of select="AttributeValue"/>
</xsl:element>
</xsl:for-each>
</Orders>
</xsl:template>
</xsl:stylesheet>
Обратите внимание, что естьне нужно использовать полный путь к элементу в совпадении с xsl:key
, если вы хотите сопоставить их все где угодно.
Обратите внимание, если вы можете использовать XSLT 2.0 (а это означает использование процессора, которыйподдерживает XSLT 2.0. Вы не можете просто изменить номер версии на 2.0 и ожидать, что он будет работать, если ваш процессор XSLT поддерживает только XSLT 1.0), вы могли бы написать это так:
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="2.0">
<xsl:output indent="yes"/>
<xsl:template match="/resultSet">
<xsl:for-each-group select="Record" group-by="OrderID">
<Orders>
<xsl:copy-of select="OrderID" />
<xsl:for-each select="current-group()">
<xsl:element name="{AttributeName}">
<xsl:value-of select="AttributeValue"/>
</xsl:element>
</xsl:for-each>
</Orders>
</xsl:for-each-group>
</xsl:template>
</xsl:stylesheet>