построение динамического XSLT в XQuery - с использованием HTML, переданного в параметр - PullRequest
0 голосов
/ 10 декабря 2018

В XQuery 3.1 я динамически создаю таблицу стилей XSLT 2.0 для преобразования документа tei-xml в HTML.

В XQuery я создаю переменную $docdate для хранения диапазона HTML:

<span><a href="somefoosite.com">2018-12-10</a></span>

Затем я передаю это параметру в таблице стилей XSLT, который затем используется:

let $stylesheet := 
           <xsl:stylesheet>
              [....]
              <xsl:param name="paramDocdate" as="element()*">{$docdate}</xsl:param>
              [....]
              <xsl:apply-templates select="$paramDocdate" mode="date"/>
              [....]
           </xsl:stylesheet>

Я не уверен в xsl:apply-templates, как заставить HTML отображаться как HTMLвместо того, чтобы просто выводить текст 2018-12-10.Чтобы быть ясным: элементы HTML определенно проходят через параметр, а не только text().

Альтернативно я представляю, что можно как-то сериализовать HTML в строку при создании переменной в XQuery (чтобы передать какдлинная строка в параметре)?

Но я не могу понять, как сделать что-либо из этого.

Я бы предпочел не писать вручную HTML-код в виде строки непосредственно при создании $docdate ... если этовозможно сделать это программно.

Заранее большое спасибо.

РЕДАКТИРОВАТЬ: Оказывается, этот шаблон ниже выводит HTML из параметра, но мне было бы интересно услышать другие способы решенияэто ...

 <xsl:template match="span" mode="date">
    <xsl:copy-of select="."/>
 </xsl:template>

1 Ответ

0 голосов
/ 10 декабря 2018

Если вы знаете, что у вас есть элемент с правильным именем и пространством имен (например, span без пространства имен для HTML 4 или HTML5 или span с пространством имен XHTML для XHTML) и просто хотите скопировать его ввывод вам вообще не нужен apply-templates, вы можете просто использовать <xsl:copy-of select="$paramDocdate"/> напрямую.

Но если вы используете apply-templates, то, очевидно, вам нужно убедиться, что существует шаблон, выполняющий правильную работу (т.е. копирование), которая вам нужна, поэтому либо, как вы обнаружили, установите шаблон для spanв требуемом режиме, который копирует или настраивает общий шаблон, такой как преобразование идентичности для этого режима (или всех режимов с xsl:template mode="#all"), который выполняет копирование.

...