Как я могу выбрать первый элемент узла с XSL? - PullRequest
0 голосов
/ 24 июля 2010

Я пишу свой первый сайт, используя XML + XSL.В xml, который я преобразую, есть этот раздел:

<page>
    <news>
        <highlights>
            <entry>
                <mini>x_thumb.jpg</mini>
                <title>title</title>
                <text>text</text>
                <image>x.jpg</image>
                <link>x.html</link>
            </entry>
            <entry>
                <mini>z_thumb.jpg</mini>
                <title>title</title>
                <text>text</text>
                <image>z.jpg</image>
                <link>z.html</link>
            </entry>
            <entry>
                <mini>y_thumb.jpg</mini>
                <title>title</title>
                <text>text</text>
                <image>y.jpg</image>
                <link>y.html</link>
            </entry>
        </highlights>
    </news>
</page>

В моем файле .xsl я хочу выбрать первую запись, потому что я делаю ротатор изображений jQuery и мне нужно изображение «по умолчанию», чтобы показать его,Поэтому я кодировал:

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:template match="/">
        [...]

        <xsl:template match="page/news/highlights/entry[1]"> 
            <div class="main_image">
                <img>
                    <xsl:attribute name="src">
                        <xsl:value-of select="image" />
                    </xsl:attribute>
                    <xsl:attribute name="alt">
                        <xsl:value-of select="title" />
                    </xsl:attribute>
                </img> 
                <div class="desc"> 
                    <div class="block"> 
                        <p>
                            <xsl:value-of select="text" />
                        </p> 
                    </div> 
                </div> 
            </div>
        </xsl:template>
[...]

И я не могу заставить его работать.Я пробовал разные способы, например:

<xsl:value-of select="page/news/highlights/entry[1]/image" />

Ни за что ... Как я могу это сделать?

Заранее спасибо!

Ответы [ 3 ]

2 голосов
/ 24 июля 2010
<xsl:template match="/">
  <!-- [...] -->

  <!-- show first entry only -->
  <xsl:apply-templates select="page/news/highlights/entry[1]" />
</xsl:template>

<!-- generic template to handle <entry> elements -->
<xsl:template match="entry"> 
  <div class="main_image">
    <!-- Attribute Value Templates save many lines of code --> 
    <img src="{image}" alt="{title}" />
    <div class="desc"> 
      <div class="block"> 
        <p><xsl:value-of select="text" /></p> 
      </div> 
    </div> 
  </div>
</xsl:template>
1 голос
/ 24 июля 2010

Хочешь что-нибудь подобное?

<xsl:foreach select="page/news/highlights/entry">
    <div>
        <xsl:if test="position() = 1">
            <xsl:attribute name="class">main_image</xsl:attribute>
        </xsl:if>
        <img>
            <xsl:attribute name="src">
                <xsl:value-of select="image" />
            </xsl:attribute>
            <xsl:attribute name="alt">
                <xsl:value-of select="title" />
            </xsl:attribute>
        </img> 
        <div class="desc"> 
            <div class="block"> 
                <p>
                    <xsl:value-of select="text()" />
                </p> 
            </div> 
        </div> 
    </div>
</xsl>
1 голос
/ 24 июля 2010
<xsl:value-of select="page/news/highlights/entry[position() = 1]/image" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...