2015-07-01 2 views
1
<data> 
<Ent> 
<Fld1>01<Fld1> 
<Fld2>ABC<Fld2> 
</Ent> 
<Ent> 
<Fld1>05<Fld1> 
<Fld2>ABC<Fld2> 
</Ent> 
<Ent> 
<Fld1>02<Fld1> 
<Fld2>ABC<Fld2> 
</Ent> 
<Ent> 
<Fld1>AA<Fld1> 
<Fld2>ABCd<Fld2> 
</Ent> 

</data> 

У меня есть 1) Сортировка записей на основе узла Fld1. если значение в FLD1 является строкой меня игнорировать его 2) Если у меня есть несколько отсутствующих номеров в отсортированных записях я должен добавить ихКак добавить отсутствующие записи в последовательности в XSL

всего мой выхода должен быть

01 ABC 
02 ABC 
03 Empty 
04 Empty 
05 ABC 

Может ли один помочь мне как я могу это сделать в xslt.

+0

Пожалуйста, выберите либо XSLT 1.0 или 2.0 - не оба. –

ответ

0

Предполагая, XSLT 2.0, я бы первым отсортировать элементы, которые вы заинтересованы в, а затем просто обрабатывать 1 to xs:integer($sorted[last()]/Fld1):

<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs"> 


    <xsl:output method="text"/> 

    <xsl:template match="data"> 
     <xsl:variable name="sorted" as="element(Ent)*"> 
      <xsl:perform-sort select="Ent[matches(Fld1, '[0-9]+')]"> 
       <xsl:sort select="xs:integer(Fld1)"/> 
      </xsl:perform-sort> 
     </xsl:variable> 
     <xsl:for-each select="1 to xs:integer($sorted[last()]/Fld1)"> 
      <xsl:value-of select="concat(format-number(., '00'), ' ', ($sorted[xs:integer(Fld1) = current()]/Fld2, 'Empty')[1], '&#10;')"/> 
     </xsl:for-each> 
    </xsl:template> 
</xsl:transform> 

См http://xsltransform.net/6qVRKwR, который использует Saxon 9.5 и выходы

01 ABC 
02 ABC 
03 Empty 
04 Empty 
05 ABC 
Смежные вопросы