使用XSL将顶级元素从列表中分离出来

时间:2010-04-28 08:17:01

标签: xml xslt

我目前在XSL中处理<xsl:foreach>语句处理此XML文件中的所有元素。我想要做的是将第一个单独处理到其余部分。我怎样才能做到这一点?

这是我目前的代码:

<ul>
    <xsl:for-each select="UpgradeProgress/Info">
        <xsl:sort select="@Order" order="descending" data-type="number" lang="en"/>
        <li><xsl:value-of select="." /></li>
    </xsl:for-each>
</ul>

3 个答案:

答案 0 :(得分:3)

假设您要处理第一个已排序的元素,这将测试choose语句中的位置并以不同方式处理它们:

<ul>
    <xsl:for-each select="UpgradeProgress/Info">
        <xsl:sort select="@Order" order="descending" data-type="number" lang="en"/>
        <li>
            <xsl:choose>
                <xsl:when test="position()=1">
                    <!-- Do something different with the first(sorted) Info element -->

                </xsl:when>
                <xsl:otherwise>
                    <xsl:value-of select="." />
                </xsl:otherwise>
            </xsl:choose>
        </li>
    </xsl:for-each>
</ul>

答案 1 :(得分:2)

XSLT模板是您的朋友!

这种转变:

<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output omit-xml-declaration="yes" indent="yes"/>
    <xsl:strip-space elements="*"/>

 <xsl:template match="/*">
     <ul>
       <xsl:apply-templates/>
     </ul>
 </xsl:template>

 <xsl:template match="num">
   <li>
     <xsl:value-of select="."/>
   </li>
 </xsl:template>

 <xsl:template match="num[1]">
   <li>
     <b><xsl:value-of select="."/></b>
   </li>
 </xsl:template>
</xsl:stylesheet>

应用于此XML文档时

<nums>
  <num>01</num>
  <num>02</num>
  <num>03</num>
  <num>04</num>
  <num>05</num>
  <num>06</num>
  <num>07</num>
  <num>08</num>
  <num>09</num>
  <num>10</num>
</nums>

生成<num>元素的第一个(顶部)所需的特殊处理:

       
  •        01 的    
  •    
  • 02
  •    
  • 03
  •    
  • 04
  •    
  • 05
  •    
  • 06
  •    
  • 07
  •    
  • 08
  •    
  • 09
  •    
  • 10

请注意,您甚至不必在代码中使用<xsl:if><xsl:choose>

尽可能使用模板的强大功能

答案 2 :(得分:0)

您可以使用xpath中的位置函数选择元素

http://www.w3schools.com/xpath/xpath_functions.asp