Отделение верхнего элемента из списка с помощью XSL - PullRequest
1 голос
/ 28 апреля 2010

В настоящее время в моем 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 ]

3 голосов
/ 28 апреля 2010

Предполагая, что вы хотите обработать первый отсортированный элемент, это проверяет позицию внутри оператора выбора и обрабатывает их по-разному:

<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>
2 голосов
/ 28 апреля 2010

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> в вашем коде.

Максимально используйте огромную мощь шаблонов .

0 голосов
/ 28 апреля 2010

вы можете выбрать свой элемент с помощью функции позиции в xpath

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...