У меня есть документ XML, и мне нужно вложить / сгруппировать смежные элементы на основе указанного значения атрибута.Я знаю, что это можно сделать на основе типа элемента или имени, но я не уверен, как это сделать с заданными значениями атрибута.Пример ввода:
<root>
<p id="111">5tw5t5et</p>
<p id="111">4qvtq3</p>
<p id="222">qv34tqv3</p>
<j>qv43tvq</j>
<p id="333">qv43tvq</p>
<p id="333">q34tvq43tvq</p>
<p id="333">q3434t3tvq43tvq</p>
</root>
Требуемый вывод:
<root>
<group>
<p id="111">5tw5t5et</p>
<p id="111">4qvtq3</p>
</group>
<p id="222">qv34tqv3</p>
<j>qv43tvq</j>
<group>
<p id="333">qv43tvq</p>
<p id="333">q34tvq43tvq</p>
<p id="333">q3434t3tvq43tvq</p>
</group>
</root>
Я знаю, что могу группировать по имени элемента, используя это
<xsl:for-each-group select="*" group-adjacent="name()">
<xsl:choose>
<xsl:when test="name()='111'">
<group>
<xsl:for-each select="current-group()">
<xsl:apply-templates/>
</xsl:for-each>
</group>
</xsl:when>
<xsl:when test="name()='333'">
<group>
<xsl:for-each select="current-group()">
<xsl:apply-templates/>
</xsl:for-each>
</group>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="current-group()"/>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each-group>
Но я не уверенкакой синтаксис использовать для группировки по атрибуту
Я пробовал это:
<xsl:for-each-group select="*" group-adjacent="@id">
, который выдает пустые ошибки последовательности, и это:
<xsl:for-each-group select="p" group-adjacent="@id">
, который игнорируетвсе не p-элементы.
Как правильно сгруппировать эти элементы, используя значение атрибута?