В связанном разделе, который касается элементов ol
, за которыми следуют элементы div
, ключ соответствует только элементам div
.Однако в вашем вопросе узлы T: представляют элементы ol
, и ключ соответствует этим элементам.
Вам необходимо заменить ключ, чтобы игнорировать T: узлов
<xsl:key name="subMembers" match="member[not(starts-with(@name, 'T:'))]" use="generate-id(preceding-sibling::*[starts-with(@name, 'T:')][1])" />
Итак, если вы начнете с выбора узлов T: , вы выберете эти узлы и связанные с ними узлы, например:
<xsl:copy-of select="self::*|key('subMembers', generate-id())" />
(Или вы можете использовать xsl:for-each
или xsl:apply-templates
, если вы также хотите преобразовать элементы группы).
Попробуйте это XSLT
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:key name="subMembers" match="member[not(starts-with(@name, 'T:'))]" use="generate-id(preceding-sibling::*[starts-with(@name, 'T:')][1])" />
<xsl:template match="members">
<members>
<xsl:for-each select="member[starts-with(@name, 'T:')]">
<group>
<xsl:copy-of select="self::*|key('subMembers', generate-id())" />
</group>
</xsl:for-each>
</members>
</xsl:template>
</xsl:stylesheet>