<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中的值是String我忽略它 2)如果我在分类记录中有一些丢失的数字,我必须添加它们
Over All我的输出应该是
01 ABC
02 ABC
03 Empty
04 Empty
05 ABC
一个人可以帮助我如何在xslt中完成此任务。
答案 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], ' ')"/>
</xsl:for-each>
</xsl:template>
</xsl:transform>
请参阅使用Saxon 9.5和输出的http://xsltransform.net/6qVRKwR
01 ABC
02 ABC
03 Empty
04 Empty
05 ABC