2013-06-04 5 views
6

Мой XML предоставляет мне несколько изображений, присвоенных различным mmids:Как выбрать первый узел только в XSLT

<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> 

Мой XSLT выбирает только URLs где размер = большой палец:

<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> 

ОДНАКО, Мне нужен только миниатюра от первого mmid (в данном случае 22404). У меня нет контроля над значением mmid.

Как остановить мой шаблон, чтобы он выводил только файл большого пальца первого mmid?

Большое спасибо за помощь!

+0

Вместо того, используя '' внутри шаблона, вы можете положить, что критерии внутри вашего матча шаблона: '' , Это даст XSLT-процессору возможность оптимизировать и упрощает таблицу стилей. –

ответ

10

Самый простой способ изменить шаблон для /Mediendaten:

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

код [@mmid] ограничивает выбор для детей Mediendaten элементов, которые несут в себе атрибут mmid, то [1] ограничивает выбор к первому из них.

P.S. Тот, кто проектировал используемый вами XML, ненавидит вас. (Используя одно и то же имя для обоих типов элементов, которые теперь помечены как Mediendaten, это грязный гнилой трюк, он делает все, что вы делаете, с данными сложнее. Попытайтесь выяснить, что вы сделали, чтобы так сильно их разозлить, и исправить их. слово мудрым.)

+1

Отличный ответ. Благодарю. Работала отлично. И вы правы: XML «сложный» ... Мы отправим им цветы и хорошую бутылку вина;) –

+1

@ RichardTinkler вы когда-нибудь отправляли их им? – Crt

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

Somme оценил.

Прежде всего, следуйте предложению от Mads Hansen. Имейте шаблон, который теперь, как обрабатывать «большие» изображения.

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

Затем, если вы хотите выводить только первый глухой удар изображения (от Mediendaten в порядке документа) использовать:

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

Но если смысл
«ОДНАКО, мне нужно только миниатюра от первого mmid " не Mediendaten (с mmid) в заказе документа, но от Mediendaten с наименьшим mmid. Попробуйте это:

<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> 

 Смежные вопросы

  • Нет связанных вопросов^_^