Решение ниже делает то, что вы просите, и работает следующим образом:
- Первый шаблон начинается с корня и выбирает все теги ID, которые делают
не имеет тега ID ниже с тем же значением (вот почему ID 2 приходит в
конец вывода)
- Перебрать список узлов ID и вывести родительский элемент ()
и все это дети
Комментарии приветствуются, это моя первая попытка в XSL за последние два года.
Я попробовал xsl: copy, но он не включал имена детских тегов, но обнаружились значения, не мог понять почему!?
Извлечено из его содержимого:
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
Рабочий код:
<xsl:stylesheet
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"
exclude-result-prefixes="xs">
<xsl:template match="/">
<store>
<xsl:variable name="non-duplicates"
select="//ID[not(.=following::ID)]" />
<xsl:for-each select="$non-duplicates">
<xsl:copy-of select="parent::*"/>
</xsl:for-each>
</store>
</xsl:template>
</xsl:stylesheet>