9

我的 XML 为我提供了分配给不同 mmid 的多个图像:

<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 只选择 size=thumb 的 url:

<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 的拇指文件?

非常感谢您的帮助!

4

3 回答 3

14

最简单的方法是更改​​模板/Mediendaten

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

[@mmid] 将选择限制为带有 mmid 属性的子 Mediendaten 元素,[1] 将选择限制为其中的第一个。

PS 设计您正在使用的 XML 的人都讨厌您。(现在标记的两种元素使用相同的名称Mediendaten是一个肮脏的烂技巧;它使您对数据所做的一切都变得更加困难。试着弄清楚您做了什么让他们如此糟糕,并弥补他们。只是一个智者的话。)

于 2013-06-04T22:10:37.853 回答
1
<xsl:apply-templates select="Mediendaten[1]/url" />
于 2013-06-04T22:10:25.143 回答
1

索姆称赞。

首先遵循 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>

但是如果
“HOWEVER, I only need the thumbnail from the first mmid” 的意思不是文档顺序中的 Mediendaten (with mmid),而是来自具有最小 mmid 的 Mediendaten。尝试这个:

<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>
于 2013-06-05T08:01:56.507 回答