Мне нужно выполнить условное действие на основе предыдущего брата в отсортированной группе.Я знаю, что функция предшествующего брата действует на исходный документ, а не на отсортированные результаты.Есть ли способ работать с отсортированным списком результатов?Я не думаю, что мне нужен метод группирования muenchian, потому что я не хочу группировать на основе предшествующего брата.
Учитывая приведенный ниже xml, я хочу отсортировать по значению контейнера, а затем проверитьчтобы увидеть, отличается ли атрибут type предшествующего брата (в отсортированных результатах), если мне нужно вывести значение нового @type, но я не хочу, чтобы результаты сортировались по @ type.
XML
<c>
<did>
<container id="cid1059023" type="Box">C 3</container>
<container id="cid1059004" type="Map-case">C 1</container>
<container id="cid1059002" type="Binder">OSxxx-3</container>
<container id="cid1059042" type="Box">OSxxx-1</container>
</did>
</c>
<c>
<did>
<container id="cid1059025" type="Box">C 4</container>
<container id="cid1059006" type="Map-case">C 2</container>
</did>
</c>
XSL
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xd="http://www.oxygenxml.com/ns/doc/xsl" version="1.0">
<xsl:template match="/">
<table>
<xsl:for-each select="child::*/container[@id]">
<xsl:sort select="."/>
<tr>
<td class="container">
<xsl:if test="@type != preceding-sibling::*/@type">
<xsl:value-of select="@type"/>
</xsl:if>
<xsl:value-of select="."/>
</td>
</tr>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>
Спасибо.