这个简短而简单的转换(根本没有使用明确的条件指令—— no xsl:choose, no xsl:when, no xsl:otherwise):
<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:template match="node()|@*">
  <xsl:copy>
   <xsl:apply-templates select="node()|@*"/>
  </xsl:copy>
 </xsl:template>
 <xsl:template match="/*">
  <t>
    <xsl:apply-templates select="*">
     <xsl:sort select="@rate" data-type="number"/>
    </xsl:apply-templates>
  </t>
 </xsl:template>
 <xsl:template match=
  "datarate
     [not(@rate >= 600)
     or
      not(../*[@rate = 600]) and not(@rate >= 800)
     ]"/>
</xsl:stylesheet>
当应用于提供的 XML 文档时(包装到单个顶部元素中以形成良好的格式):
<t>
    <datarate rate="200" />
    <datarate rate="600" />
    <datarate rate="300" />
    <datarate rate="400" />
    <datarate rate="800" />
    <datarate rate="1000" />
</t>
产生想要的正确结果:
<t>
   <datarate rate="600"/>
   <datarate rate="800"/>
   <datarate rate="1000"/>
</t>
当应用于以下稍有变化的 XML 文档时(没有 600 的比率,但有 601 和 650 的比率):
<t>
    <datarate rate="200" />
    <datarate rate="601" />
    <datarate rate="650" />
    <datarate rate="300" />
    <datarate rate="400" />
    <datarate rate="800" />
    <datarate rate="1000" />
</t>
再次产生正确的结果:
<t>
   <datarate rate="800"/>
   <datarate rate="1000"/>
</t>