首页 > 解决方案 > 对序列的字符串操作

问题描述

我有一个包含一系列图像及其宽度的 XML:

<p>
    <image width="10cm"/>
    <image width="3cm"/>
</p>

我需要计算这些图像的总宽度。当我只有一张图片时,这很简单:

<template match="p">
    <xsl:variable name="imgwidth">
        <xsl:value-of select="number(substring-before(image/@width,'cm'))"/>

天真地,我尝试扩展它以容纳更多图像:

<xsl:value-of select="sum(number(substring-before(image/@width,'cm')))"/>

当我在我的示例上运行它时,我收到一条错误消息:

fn:substring-before() ("10cm", "3cm") 的第一个参数不允许包含多个项目的序列

我已经进行了一些搜索,但无法弄清楚如何在我的<p>.

标签: xslt

解决方案


在 XSLT 2.0 中,您可以这样编写...

<xsl:value-of select="sum(image/number(substring-before(@width,'cm')))"/>

或者,也许这...

<xsl:value-of select="sum(for $i in image return number(substring-before($i/@width, 'cm')))"/>

推荐阅读