2013-06-04 12 views
6
ilk düğümü seçmek için

My XML farklı mmids atanmış birden fazla görüntülerle beni sağlamaktadır:nasıl sadece XSLT'de

<Mediendaten> 
    <Mediendaten mmid="22404"> 
     <url size="original">A 22404 FILE</url> 
     <url size="thumb">ANOTHER 22404 FILE</url> 
    </Mediendaten> 
    <Mediendaten mmid="22405"> 
     <url size="original">A 22405 FILE</url> 
     <url size="thumb">ANOTHER 22405 FILE</url> 
    </Mediendaten> 
<Mediendaten> 

Benim XSLT sadece URL'ler seçer nerede size = başparmak:

<xsl:template match="/Mediendaten"> 
<xsl:apply-templates select="Mediendaten/url"> 
</xsl:apply-templates> 
</xsl:template> 

<xsl:template match="Mediendaten/url"> 
<xsl:if test="@size = 'thumb'"> 
<img width="280" border="0" align="left"> 
<xsl:attribute name="src"><xsl:value-of select="."/></xsl:attribute> 
</img> 
</xsl:if> 
</xsl:template> 

ANCAK, Sadece ilk mmid'den küçük resme ihtiyacım var (bu durumda 22404). Mmid değeri üzerinde NO kontrolüm var. sadece birinci mmid ait başparmak dosyaya verir, böylece

nasıl şablon durdurabilirim?

Yardımlarınız için çok teşekkürler!

+0

Aksine bir '' Şablonunuzun içinde sen koyabilirsiniz kullanmak yerine bu kriterler şablon maçın içeride: '' . XSLT işlemcisine optimize etme ve stil sayfasını basitleştirme şansı verir. –

cevap

10

basit yolu /Mediendaten şablonunu değiştirmek için:

<xsl:template match="/Mediendaten"> 
    <xsl:apply-templates select="Mediendaten[@mmid][1]/url"/> 
</xsl:template> 

[@mmid] mmid niteliği taşıyan çocuk Mediendaten elemanlarına seçimini kısıtlar, [1] seçimini kısıtlar Bunlardan ilki için.

P.S. Kullandığın XML'i kim tasarladıysa senden nefret ediyor. (Element şimdi Mediendaten etiketli her iki tür için aynı adı kullanarak çirkin bir oyunu olduğunu, bu size zor verilerle her şeyi yapar Sadece bu kadar kötü onları kızdırmak için ne yaptığını anlamaya çalışın ve onlara telafi.. bilge bir kelime.)

+1

Harika cevap. Teşekkürler. Mükemmel çalıştı. Ve haklısınız: XML 'zorlu' ... Onlara çiçek ve iyi bir şişe şarap göndereceğiz;) –

+1

@RichardTinkler hiç göndermiş miydiniz? – Crt

1
<xsl:apply-templates select="Mediendaten[1]/url" /> 
0

Somme takdir etmektedir. Her şeyden

İlk Mads Hansen gelen öneri izleyin. Şimdi "başparmak" görüntüleri nasıl ele alınacağını bir şablon var. "
anlamı ANCAK, sadece gerekirse

<xsl:template match="/Mediendaten"> 
    <xsl:apply-templates select="Mediendaten[1]/url[@size = 'thumb']" /> 
</xsl:template> 

Ama: Sonra

<xsl:template match="Mediendaten/url[@size = 'thumb']" > 
    <img width="280" border="0" align="left" src="{.}" /> 
</xsl:template> 

Eğer çıkış (Mediendaten gelenbelge sırasına göre) sadece ilk güm görüntü isterseniz kullanın İlk mmid'deki " " belgesinin küçük resmi, belge sırasına göre Mediendaten (mmid ile) değil, en küçük mmidli Mediendaten'dir. Bu deneyin:

<xsl:template match="/Mediendaten"> 
    <xsl:for-each select="Mediendaten"> 
     <xsl:sort select="@mmid"/> 
     <xsl:if test="position()=1"> 
      <xsl:apply-templates select="url[@size = 'thumb']" /> 
     </xsl:if> 
    </xsl:for-each> 
</xsl:template>