Я использую XSLT для преобразования сложного XML-вывода системы управления контентом в XHTML. Я использую <xsl:apply-templates/>
, чтобы получить XHTML-фрагмент того, что описано входными данными XML. Этот ввод XML имеет очень сложную структуру, которая может описывать множество различных случаев, которые должны обрабатываться несколькими элементами шаблона XSLT. И эта структура может изменяться довольно часто в будущем.
Ранее полученный фрагмент этого преобразования был напрямую отправлен на выход XSLT. Теперь требования изменились, и мне нужно зафиксировать результат, иногда изменять его, чтобы вставить какой-то другой правильно сформированный фрагмент XHTML в определенную позицию в значении фрагмента.
Для демонстрации рассмотрим <xsl:apply-templates/>
, создав некоторый непрозрачный фрагмент XHTML, захваченный в переменную контейнер .
<xsl:variable name="container">
<xsl:apply-templates />
</xsl:variable>
Далее в переменной есть второй XHTML-фрагмент фрагмент :
<xsl:variable name="snippet">
<xsl:call-template name="get-snippet" />
</xsl:variable>
Требование гласит, что в $ snippet должен быть установлен набор узлов перед любым произвольно содержащимся периодом в конце значения $ container . Это не проблема, если фрагменты XHTML в обеих переменных не должны быть сохранены как фрагменты. Таким образом, нельзя работать со строковыми значениями любой переменной.
Есть ли возможность выполнить это требование в XSLT без потери мощности и гибкости <xsl:apply-templates/>
при извлечении фрагмента XHTML в $ контейнере ?
Кстати: я уже знаю о доступе к последнему текстовому узлу в $container
, используя:
node-set($container)//child::text[last()]
Но я пропустил, чтобы что-то вставить в середину этого текстового узла, и я считаю, что XSLT не может обеспечить надлежащую поддержку того, что я хочу сделать.