使用xsl设置图像大小

时间:2010-10-07 13:22:13

标签: xml xslt

我有一个包含img标签的XML

<xml>
<img src="/path/to/file.jpg" orginalwidth="150" />
</xml>

我希望:

<img src="/paht/to/file.jpg" size=SIZE />

SIZE最小为orginalsize和100px

3 个答案:

答案 0 :(得分:3)

使用XSLT 1.0(XSLT 2.0可能会为您提供其他选项,但不确定您是否可以使用它):

<img src="{@src}">
    <xsl:choose>
      <xsl:when test="@originalsize &lt; 100">
        <xsl:attribute name="size"><xsl:value-of select="@originalsize"/></xsl:attribute>
      <xsl:otherwise>
        <xsl:attribute name="size">100</xsl:attribute>
      </xsl:otherwise>
  </xsl:choose>
</img>

答案 1 :(得分:3)

此转化

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:param name="pmaxSize" select="100"/>

 <xsl:template match="node()|@*">
  <xsl:copy>
   <xsl:apply-templates select="node()|@*"/>
  </xsl:copy>
 </xsl:template>

 <xsl:template match="@orginalwidth">
  <xsl:attribute name="size">
   <xsl:value-of select=".*not(. > $pmaxSize) + $pmaxSize*(. > $pmaxSize)"/>
   <xsl:text>px</xsl:text>
  </xsl:attribute>
 </xsl:template>
</xsl:stylesheet>
在提供的XML文档上执行

<xml>
 <img src="/path/to/file.jpg" orginalwidth="150" />
</xml>

产生想要的结果

<xml>
    <img src="/path/to/file.jpg" size="100px"/>
</xml>

应用于以下XML文档

<xml>
 <img src="/path/to/file.jpg" orginalwidth="99" />
</xml>

结果又是想要的和正确的

<xml>
    <img src="/path/to/file.jpg" size="99px"/>
</xml>

<强>解释

在XPath 1.0中,任何布尔值,当用作数字时,都会从true()转换为1,从false()转换为0

因此,表达式:

.*not(. > $pmaxSize) + $pmaxSize*(. > $pmaxSize)

如果.小于或等于.,则评估为$pmaxSize,并$pmaxSize为其他人。{

.是解释为数字的当前节点的值。

答案 2 :(得分:1)

只要可以使用文字结果元素和属性值模板,请使用它。

<img src="{@src}" size="{substring('100',
                                   1 div (@orginalwidth > 100))
                       }{substring(@orginalwidth,
                                   1 div not(@orginalwidth > 100))
                       }px"/>

编辑:最低限度不是最高,抱歉。