Спасибо Майклу за ответ. Размещено здесь для полноты. Сложно из-за пространств имен, используемых в 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