我有以下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: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>
但我不知道如何过滤用户。 任何帮助表示赞赏。 P.S。:我使用ASP.NET 3.5
答案 0 :(得分:1)
您可以使用此模板:
<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>