XSLT сортировка, выберите следующий ближайший - PullRequest
2 голосов
/ 16 июля 2011

У меня есть следующий 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>

но я не знаю, как фильтровать пользователей. Любая помощь приветствуется. П.С .: Я использую ASP.NET 3.5

1 Ответ

1 голос
/ 16 июля 2011

Вы можете использовать этот шаблон:

<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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...