c# - XSLT排序,选择next nearest

标签 c# .net xml xslt xpath

我有以下 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/

相关文章:

c# - 可以将 C# 扩展方法添加到 F# 类型吗?

c# - 静态抽象类

javascript - 如何使用 XSLT 和 javascript 从 XML 创建 HTML?

java - 有没有办法构建 StAX 过滤器链?

c# - 如何从 C# 中的文件/流读取 Pkcs#7 证书链?

c# - Winforms Drawing.rectangle.union 的 WPF 等价物是什么?

c# - 有没有办法发现 Action<in T> 委托(delegate)实例的原始通用参数类型?

c# - 在没有引用的情况下记录整个类库

.net - 将参数传递给 Sitecore 中的 Razor View 渲染

xml - Chrome 开发者工具响应/预览选项卡 "Pretty Print"或 "Formatting"