Обычное решение в 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
в index-of-string()
скобках.Конечно, вы хотите вычесть 3 или 1 из возвращаемого значения из index-of-string()
?Потому что на самом деле не имеет смысла вычитать 3 или 1 из "
.
Кроме того, использование <xsl:value-of />
внутри тела определения переменной, такого как это, обычно избыточно.Я удалил его.
Наконец, вы можете использовать substring-before()
и substring-after()
, чтобы получить то, что вы хотите с меньшими хлопотами:
<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)" />
На самом деле я не уверен из вашего вопроса,значение входной строки, которое вы указали вверху, было до или после разбора XML.Если это было после синтаксического анализа, т. Е. Сами строковые данные содержат "
, а не "
, введите "
, но вам нужно экранировать &
как &
:
<xsl:variable name="beforeHeight" as="xs:integer">height=&quot;</xsl:variable>
<xsl:variable name="afterHeight" as="xs:string">&quot; style=</xsl:variable>
В этом случае у вас не будет кавычек в строках, поэтому вам не нужно помещать значения в такие переменные;но это, вероятно, хорошая идея для удобочитаемости.
Аналогично &#x003e
нужно будет экранировать как &amp;#x003e
.