2013-06-04 54 views
6

XML của tôi cung cấp cho tôi với nhiều hình ảnh giao cho mmids khác nhau:Làm thế nào để chọn nút đầu tiên chỉ trong 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 My lựa chọn chỉ các url nơi size = ngón tay cái:

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

TUY NHIÊN, Tôi chỉ cần hình thu nhỏ từ mmid đầu tiên (trong trường hợp này là 22404). Tôi KHÔNG có quyền kiểm soát giá trị mmid.

Làm cách nào để dừng mẫu của tôi để nó chỉ xuất ra tệp ngón tay cái của mmid đầu tiên?

Rất cám ơn vì đã trợ giúp!

+0

Thay vì sử dụng một '' bên trong mẫu của bạn, bạn có thể đặt tiêu chí bên trong template match của bạn: '' . Nó sẽ cung cấp cho bộ xử lý XSLT một cơ hội để tối ưu hóa và đơn giản hóa bảng định kiểu. –

Trả lời

10

Cách đơn giản nhất là thay đổi mẫu cho /Mediendaten:

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

Các [@mmid] chế các lựa chọn đến các yếu tố Mediendaten con mang thuộc tính mmid, [1] chế các lựa chọn đến cái đầu tiên.

P.S. Ai thiết kế XML bạn đang sử dụng ghét bạn. (Sử dụng cùng tên cho cả hai loại phần tử bây giờ được gắn nhãn Mediendaten là một mẹo bẩn thối, nó làm cho mọi thứ bạn làm với dữ liệu khó hơn. Hãy cố gắng tìm ra những gì bạn đã làm để piss chúng ra rất tệ, và sửa đổi chúng. một từ cho khôn ngoan.)

+1

Câu trả lời hay. Cảm ơn. Làm việc hoàn hảo. Và bạn nói đúng: XML là 'thách thức' ... Chúng tôi sẽ gửi cho họ những bông hoa và một chai rượu vang tốt;) –

+1

@RichardTinkler bạn đã bao giờ gửi cho họ chưa? – Crt

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

Somme khen ngợi.

Trước hết hãy làm theo đề xuất của Mads Hansen. Có một mẫu mà bây giờ làm thế nào để xử lý hình ảnh "ngón tay cái".

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

Sau đó, nếu bạn muốn đầu ra chỉ là hình ảnh đập đầu tiên (từ Mediendaten trong trật tự tài liệu) sử dụng:

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

Nhưng nếu ý nghĩa của
"Tuy nhiên, tôi chỉ cần hình thu nhỏ từ mmid đầu tiên " không phải là Mediendaten (có mmid) theo thứ tự tài liệu, nhưng từ Mediendaten với mmid nhỏ nhất. Hãy thử điều này:

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