我有以下 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>
我需要按姓名排序,然后按姓氏排序,就像在 SQL 中一样:按姓名排序,姓氏升序
,然后选择下一个最近的用户(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>
但我不知道如何过滤用户。 任何帮助表示赞赏。 P.S.: 我使用 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>
关于c# - XSLT排序,选择next nearest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6719313/