2017-02-10 9 views
0

Возможно ли изменить порядок сегментов xml, переместив последний экземпляр сегмента в последнюю часть сообщения. Пожалуйста, смотрите образцы ниже:Переупорядочить узлы с помощью xslt, используя дату в качестве ключа

Оригинальная структура:

<Header> 
<Field>20170201</Field> 
</Header> 
<Header> 
<Field>20170203</Field> 
</Header> 
<Line> 
<Field>20170202</Field> 
</Line> 

Желаемый результат:

<Header> 
<Field>20170201</Field> 
</Header> 
<Line> 
<Field>20170202</Field> 
</Line> 
<Header> 
<Field>20170203</Field> 
</Header> 

В приведенном выше примере, 2-й экземпляр (или последний экземпляр заголовка) был перемещен после того, как узел линии ,

+0

Google 'xslt sort'. - P.S. У вас есть цифры, а не даты (хотя они и представляют даты). XSLT 1.0 не знает, как сортировать по дате, но сортировка по номерам, которые у вас есть, будет иметь тот же эффект. –

+0

ok sir michael, я думаю, формат даты, который я использую, намного сложнее. YYYY-MM-DDTHH: mm: ss.xxxxxZ. Вы были правы в том, что не использовали дату. Могу ли я вместо этого переместить последний экземпляр после последнего сегмента? –

+0

Этот формат также сортируется, используя '' text "' как 'data-type'. –

ответ

0

Спасибо, Майкл за решение! Это было действительно просто. еще раз спасибо!

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 

    <xsl:template match="MainNode"> 
    <xsl:copy> 
     <xsl:apply-templates> 
     <xsl:sort data-type="text" select="Field"/> 
     </xsl:apply-templates> 
    </xsl:copy> 
    </xsl:template> 

    <xsl:template match="*"> 
    <xsl:copy> 
     <xsl:apply-templates/> 
    </xsl:copy> 
    </xsl:template> 

</xsl:stylesheet> 

 Смежные вопросы

  • Нет связанных вопросов^_^