xslt 1.0 предшествующий брат для отсортированной группы - PullRequest
1 голос
/ 15 апреля 2011

Мне нужно выполнить условное действие на основе предыдущего брата в отсортированной группе.Я знаю, что функция предшествующего брата действует на исходный документ, а не на отсортированные результаты.Есть ли способ работать с отсортированным списком результатов?Я не думаю, что мне нужен метод группирования 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>

Спасибо.

1 Ответ

0 голосов
/ 15 апреля 2011

Я не вижу, как вы можете сделать это с XSLT 1.0 без использования расширения. Так что я бы либо использовал XSLT 2.0, либо, если кто-то с пистолетом направил на вас крик , вы должны использовать XSLT 1.0 , тогда вы могли бы создать конвейер с двумя шагами XSLT, сначала выполнить сортировку шаг и фильтрация за секунду.

...