Это поможет всем, если вы используете правильную терминологию.Я думаю, что под «тегами» вы, вероятно, подразумеваете «элементы».(Элементы на самом деле имеют два тега, начальный тег и конечный тег).Изначально я понятия не имел, что вы имели в виду под «связками», но, изучая ваш пример, я решил, что вы имели в виду «группы».
Входные данные, которые вы показываете, не являются полным документом.В правильно сформированном XML всегда есть корневой элемент.Так что я не знаю, что вы подразумеваете под «потерянными тегами» - у каждого элемента в правильно сформированном XML есть родительский узел.
И хотя мы говорим о вашем вопросе, он помогает всем с вопросами XSLT, еслиВы добавляете в вопрос тег «xslt 1.0», «xslt 2.0» или «xslt 3.0» («тег» в смысле StackOverflow, а не в XML), поскольку это часто влияет на ответ.
Код XSLT, который вы показываете, обрабатывает только элементы в $ list, то есть элементы с именем «serial».Поэтому я не вижу, как вы можете получать выходные данные, содержащие, например, Info111 и Info222.
Код XSLT 2.0 для этого:
<xsl:for-each-group select="*" group-adjacent="boolean(self::serial)">
<xsl:choose>
<xsl:when test="self::serial">
<xsl:copy-of select="current-group()"/>
</xsl:when>
<xsl:otherwise>
<serial><xsl:copy-of select="current-group()"/></serial>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each-group>