Я часто использую этот XPath sum(preceding::*/string-length())
XSLT/Xpath - выполнение функции суммы
Он делает то, что мне нужно это делать (обеспечивает подсчет символов всего текста до этого контекста в файле XML).
Проблема: она медленная.
Есть ли другая встроенная функция, которую я должен использовать вместо этого? Или расширение?
UPDATE:
Основываясь на комментарий Майкла Кея, я исследовал XSLT 3.0 <accumulator>
. Это была моя первая попытка с 3.0 (мне пришлось обновить OxygenXML, чтобы он работал). Я не полностью адаптировал его к моим потребностям, но первоначальный тест ниже показывает обещание.
<xsl:output method="xml" />
<xsl:accumulator
name="f:string-summ"
post-descent="f:accum-string-length"
as="xs:integer"
initial-value="0">
<xsl:accumulator-rule
match="text/*"
new-value="$value + string-length()"/>
</xsl:accumulator>
<xsl:template match="text/*">
<xsl:value-of select="f:accum-string-length()" />
</xsl:template>
Тема: Переполнение стека требует тега «XSLT-3.0».
Какой синтаксический анализатор/компилятор Xslt вы используете? – rene
Для этого ... Я использую Saxon HE, из командной строки. – Paulb
Можете ли вы дать указание на размер вашего xml, текущие тайминги и целевое время? – rene