Рассмотрим следующий скрипт XSLT:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="iso-8859-1"/>
<xsl:variable name="stringmap">
<map>
<entry><key>red</key><value>rot</value></entry>
<entry><key>green</key><value>gruen</value></entry>
<entry><key>blue</key><value>blau</value></entry>
</map>
</xsl:variable>
<xsl:template match="/">
<!-- IMPLEMENT ME -->
</xsl:template>
</xsl:stylesheet>
Я бы хотел, чтобы этот скрипт напечатал redgreenblue
.
Есть ли способ трактовать разметку XML, которая хранится в переменной stringmap
, как отдельный документ, на котором я могу выполнять запросы XPath? Я в основном ищу что-то вроде
<xsl:for-each select="document($stringmap)/map/entry">
<xsl:value-of select="key"/>
</xsl:for-each>
(за исключением того, что функция document()
ожидает URI).
Мотивация: у меня есть различные длинные <xsl:choose>
элементы, которые отображают данную строку в другую строку. Я хотел бы заменить все это одним шаблоном, который принимает аргумент map (это простой XML-документ). Я надеюсь, что тогда я смогу заменить <xsl:choose>
на простое утверждение вроде <xsl:value-of select="$stringmap/map/entry/value[../key='$givenkey']"/>
Я использую XSLT 1.0, используя xsltproc .