Сортировка XSLT - как отсортировать дочерние узлы XML внутри родительского узла с атрибутом

То, что начиналось как простая вещь, оказалось довольно проблематичным для XSLT noob.

Пытаясь отсортировать дочерние узлы / нисходящие, но после добавления атрибута к их родительскому узлу я получаю сообщение об ошибке при отладке в VS2010:

"Attribute and namespace nodes cannot be added to the parent element after a text, comment, pi, or sub-element node has already been added."

Предположим, у меня есть этот простой XML:

<posts>
    <year value="2013">
        <post postid="10030" postmonth="1">
            <othernode></othernode>
            <othernode2></othernode2>
        </post>
        <post postid="10040" postmonth="2">
            <othernode></othernode>
            <othernode2></othernode2>
        </post>
        <post postid="10050" postmonth="3">
             <othernode></othernode>
             <othernode2></othernode2>
        </post>
    </year>
    <year value="2012">
        <post postid="10010" postmonth="1">
            <othernode></othernode>
            <othernode2></othernode2>
        </post>
        <post postid="10015" postmonth="2">
            <othernode></othernode>
            <othernode2></othernode2>
        </post>
        <post postid="10020" postmonth="3">
             <othernode></othernode>
             <othernode2></othernode2>
        </post>
    </year>
</posts>

Я передаю XPATH источнику xmldatasource для получения соответствующего<year> узел, например 2013. Тогда мне нужно разобрать своего ребенка<post> нисходящие узлы с использованием postid, поэтому для<year value=2013>, postid = 10050 будет отображаться первым при визуализации.

Итак, чтобы быть ясным: меня интересует только сортировка внутри одного<year> узел.

До того, как я разделил узлы на отдельные узлы (например, xml был / posts / post), работал следующий XSLT:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="xml" indent="yes" omit-xml-declaration="no"/>
    <xsl:strip-space elements="*"/>
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()">
                <xsl:sort select="@postid" data-type="text" order="descending"/>
            </xsl:apply-templates>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

Теперь xmldatasource пуст при работе из-за вышеуказанной ошибки. Если я перехожу в порядке возрастания в порядке, очевидно, что возвращается тот же XML (без преобразования)

Вопрос: как обновить XSLT выше (или новый), чтобы он соответствовал атрибуту родительского узла (<year value="">)? В ходе исследования ответ сказал: «Мне нужно добавить создание атрибута перед созданием элемента». Это имеет смысл, так как при просмотре отладчика дочерние узлы формируются в порядке desc, но у тега year отсутствует свой атрибут. Но я не имею ни малейшего понятия о XSLT. Не могу видеть это слишком сложным, но просто не знаю языка.

Любая помощь, высоко ценится. Спасибо

Ответы на вопрос(2)

Ваш ответ на вопрос