Есть ли какая-либо функция xslt для извлечения длины байта строки.Длина байта строки в xslt
Для. например: i ♥ u
Длина символов, полученная длиной строки = 5
Длина байта, которая мне нужна = 7 байт.
Есть ли какая-либо функция xslt для извлечения длины байта строки.Длина байта строки в xslt
Для. например: i ♥ u
Длина символов, полученная длиной строки = 5
Длина байта, которая мне нужна = 7 байт.
Предполагая, что есть поддержка бинарного модуля EXPath, то вы можете использовать bin:length(bin:encode-string('i ♥ u'))
, как в
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"
xmlns:bin="http://expath.org/ns/binary">
<xsl:template name="main" match="/">
<xsl:value-of select="for $enc in ('UTF-8', 'UTF-16') return bin:length(bin:encode-string('i ♥ u', $enc))"/>
</xsl:template>
</xsl:transform>
Вы также можете играть некоторые трюки с iri-to-uri()
.
Попробуйте это:
iri-to-uri()
к строке%xx
последовательностей в результате к одному ASCII символа с помощью replace()
функцииНапример string-length(replace(iri-to-uri('§'), '%..', '%'))
=> 2
Также протестирована на вашем примере.
А вот другой подход (опять же при условии, UTF-8 кодировки):
sum(for $c in string-to-codepoints($in)
return (1 + number($c>127) + number($c>2047) + number($c>65535)))
В какой кодировке вы хотите, чтобы вычислить длину байт? Строка не имеет длины байта без учета конкретной кодировки. Посмотрите, поможет ли http://expath.org/spec/binary#encode-string. –