我有一个包含img标签的XML
<xml>
<img src="/path/to/file.jpg" orginalwidth="150" />
</xml>
我希望:
<img src="/paht/to/file.jpg" size=SIZE />
SIZE最小为orginalsize和100px
答案 0 :(得分:3)
使用XSLT 1.0(XSLT 2.0可能会为您提供其他选项,但不确定您是否可以使用它):
<img src="{@src}">
<xsl:choose>
<xsl:when test="@originalsize < 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"/>
编辑:最低限度不是最高,抱歉。