XSLT排序,选择下一个最近的
本文关键字:最近 下一个 选择 排序 XSLT | 更新日期: 2023-09-27 18:02:22
我有以下XML:
<Users>
<User Id="1">
<Name>Name1</Name>
<LastName>LastName1</LastName>
</User>
<User Id="5">
<Name>Name5</Name>
<LastName>LastName5</LastName>
</User>
<User Id="2">
<Name>Name2</Name>
<LastName>LastName2</LastName>
</User>
<User Id="4">
<Name>Name4</Name>
<LastName>LastName4</LastName>
</User>
<User Id="3">
<Name>Name3</Name>
<LastName>LastName3</LastName>
</User>
</Users>
我需要按名称排序,然后按LastName排序,就像在SQL: order by Name, LastName asc
中一样,然后选择最接近的用户(User1, User3, User5),所以输出应该是:
<Users>
<User Id="1">
<Name>Name1</Name>
<LastName>LastName1</LastName>
</User>
<User Id="3">
<Name>Name3</Name>
<LastName>LastName3</LastName>
</User>
<User Id="5">
<Name>Name5</Name>
<LastName>LastName5</LastName>
</User>
</Users>
现在我使用以下模板进行排序:
<xsl:template match="Users">
<Users>
<xsl:for-each select="User">
<xsl:sort select="Name"/>
<xsl:sort select="LastName"/>
<User>
<xsl:attribute name="Id">
<xsl:value-of select="attribute::Id"/>
</xsl:attribute>
<Name>
<xsl:value-of select="Name"/>
</Name>
<LastName>
<xsl:value-of select="LastName"/>
</LastName>
</User>
</xsl:for-each>
</Users>
</xsl:template>
但是我不知道如何过滤用户。任何帮助都是感激的。附注:我使用ASP。NET 3.5
你可以使用这个模板:
<xsl:template match="Users">
<xsl:copy>
<xsl:apply-templates select="User">
<xsl:sort select="Name"/>
<xsl:sort select="LastName"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
<xsl:template match="User">
<xsl:if test="position() mod 2 = 1">
<xsl:copy-of select="."/>
</xsl:if>
</xsl:template>
产生期望的输出:
<Users>
<User Id="1">
<Name>Name1</Name>
<LastName>LastName1</LastName>
</User>
<User Id="3">
<Name>Name3</Name>
<LastName>LastName3</LastName>
</User>
<User Id="5">
<Name>Name5</Name>
<LastName>LastName5</LastName>
</User>
</Users>