Строковые операции над последовательностью - PullRequest
0 голосов
/ 09 января 2019

У меня есть XML, который содержит серию изображений и их ширину:

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

Мне нужно рассчитать общую ширину этих изображений. Когда у меня есть только 1 изображение, это просто:

<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>.

1 Ответ

0 голосов
/ 09 января 2019

В 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')))"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...