我正在学习XSLT,目前我真的陷入困境,无法找到解决方案。如果你能帮助我,我真的很感激。 在你的下方可以找到一个例子
$ string的值:
<img src="Afbeeldingen_Hotpot/beer.jpg" alt="afbeelding van een beer" title="beer" width="170" height="144" style="display:block; margin-left:auto; margin-right:auto; text-align:center;" style="float:center;" />
我的目标是过滤出图像的高度......在本例中为“144”。 functx:我从这个网站获得的字符串索引:http://www.xsltfunctions.com/xsl/functx_index-of-string.html
这是我现在使用的XSLT代码:
<xsl:variable name="positionHeight" as="xs:integer"><xsl:value-of select="functx:index-of-string($string,'height=') + 8"/></xsl:variable>
<xsl:variable name="partStringHeight" as="xs:string"><xsl:value-of select="substring($string,$positionHeight)"/></xsl:variable>
<xsl:variable name="lengthHeight" as="xs:integer"><xsl:value-of select="functx:index-of-string($partStringHeight,'style=' - 3)"/></xsl:variable>
<xsl:variable name="height" as="xs:string"><xsl:sequence select="substring($partStringHeight,1,$lengthHeight)"/></xsl:variable>
在我想要使用的XSLT代码下面,但是因为“”“的字符串索引为零而给出错误。
<xsl:variable name="positionHeight" as="xs:integer"><xsl:value-of select="functx:index-of-string($string,'height=') + 8"/></xsl:variable>
<xsl:variable name="partStringHeight" as="xs:string"><xsl:value-of select="substring($string,$positionHeight)"/></xsl:variable>
<xsl:variable name="lengthHeight" as="xs:integer"><xsl:value-of select="functx:index-of-string($partStringHeight,'"' - 1)"/></xsl:variable>
<xsl:variable name="height" as="xs:string"><xsl:sequence select="substring($partStringHeight,1,$lengthHeight)"/></xsl:variable>
有没有办法获得子串的索引,如:
" and &#x003E;
因为我有很多字符串,所以我需要高度,但“style =”不会发生..
答案 0 :(得分:2)
XSLT中的常用解决方案是将不方便的字符串放入变量的值(不使用select
):
<xsl:variable name="quot">"</xsl:variable>
然后
<xsl:variable name="lengthHeight" as="xs:integer"
select="functx:index-of-string($partStringHeight,$quot) - 1" />
另请注意,您已将- 3
或- 1
置于<{1}}括号内。当然你想从index-of-string()
的返回值中减去3或1?因为从index-of-string()
中减去3或1是没有意义的。
此外,在变量定义体内使用"
通常是多余的。我删除了它。
最后,您可以使用<xsl:value-of />
和substring-before()
轻松获得所需内容:
substring-after()
实际上我不确定你的问题是你在顶部显示的输入字符串值是在XML解析之前还是之后。如果是在解析之后,即字符串数据本身包含<xsl:variable name="beforeHeight" as="xs:integer">height="</xsl:variable>
<xsl:variable name="afterHeight" as="xs:string">" style=</xsl:variable>
<xsl:variable name="height" as="xs:string"
select="substring-before(substring-after($string, $beforeHeight), $afterHeight)" />
而不是"
,那么请输入"
,但您需要将"
转义为&
:
&
在这种情况下,您的字符串中不会有引号,因此您不需要将值放在这样的变量中;但是可读性可能是个好主意。
同样,<xsl:variable name="beforeHeight" as="xs:integer">height=&quot;</xsl:variable>
<xsl:variable name="afterHeight" as="xs:string">&quot; style=</xsl:variable>
需要转发为&#x003e
。