Спасибо Майклу за ответ. Размещено здесь для полноты. Сложно из-за пространств имен, используемых в xml:

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

<Salaries>
    <Salary>
        <Base>1000</Base>
        <CreatedDate xmlns:d7p1="http://schemas.datacontract.org/2004/07/System">
            <d7p1:DateTime>2016-01-09T14:38:54.8440764Z</d7p1:DateTime>
            <d7p1:OffsetMinutes>0</d7p1:OffsetMinutes>
        </CreatedDate>
    </Salary>
    <Salary>
        <Base>2000</Base>
        <CreatedDate xmlns:d7p1="http://schemas.datacontract.org/2004/07/System">
            <d7p1:DateTime>2015-01-09T14:38:54.8440764Z</d7p1:DateTime>
            <d7p1:OffsetMinutes>0</d7p1:OffsetMinutes>
        </CreatedDate>
    </Salary>
    <Salary>
        <Base>3000</Base>
        <CreatedDate xmlns:d7p1="http://schemas.datacontract.org/2004/07/System">
            <d7p1:DateTime>2017-01-09T14:38:54.8440764Z</d7p1:DateTime>
            <d7p1:OffsetMinutes>0</d7p1:OffsetMinutes>
        </CreatedDate>
    </Salary>
</Salaries>

Когда я использую сортировку под for-each (Salaries / Salary) с функцией c #, чтобы добавить минуты смещения в дату и преобразовать, например, в длинный номер 201701010000 (чтобы упростить манипуляции в xslt).

<xsl:sort select="number(cs:Convertdatetolong(cs:AddOffsetMinutes(substring(p:CreatedDate/d5p1:DateTime,1,19),p:CreatedDate/d5p1:OffsetMinutes)))" order="ascending"/>

Сортировка работает отлично, и я получаю записи в следующем порядке:

200010003000

Проблема возникает, если я использую предшествующий брат / предшествующий (и следующий). Я ожидал бы, что первая запись (2000) не будет иметь предыдущей записи, а последняя запись (3000) не будет иметь следующей. Однако, когда я использую предыдущее / следующее, я получаю предыдущую и следующую запись из исходного XML:

2000 (предыдущий - 1000 / следующий - 3000)1000 (предыдущий - / следующий - 2000)3000 (предыдущий - 2000 / следующий -)

Я хотел бы иметь возможность сравнить с предыдущей записи (в отсортированном порядке) и текущей записи (в отсортированном порядке):

2000 (предыдущий - / следующий - 1000)1000 (предыдущий - 2000 / следующий 3000)3000 (предыдущий - 1000 / следующий -)

Я пробовал предшествующий брат и предшественник

<xsl:value-of select="preceding::p:Salary[1]/p:Base"/>
<xsl:value-of select="preceding-sibling::p:Salary[1]/p:Base"/>
<xsl:value-of select="preceding::p:Salary[position()=1]/p:Base"/>

(зарплата находится в другом пространстве имен (p) Это действительно возможно, или я должен использовать переменные, чтобы сохранить данные предыдущей записи для сравнения?

Любые идеи с благодарностью принимаются. Я использую xslt 1.0

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

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