Это может быть выполнено, если вы установите output method
на text
.
Это преобразование :
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="char">
<xsl:value-of select="concat('&#x', /char/@hex, ';', '')"/>
</xsl:template>
</xsl:stylesheet>
При применении к предоставленному документу XML :
<char hex="AB"/>
дает желаемый результат :
«
Конечно, с text
В методе вывода нужно создать отдельные символы начальных и конечных тегов (<xsl:copy>
, <xsl:copy-of>
, <xsl:element>
и буквальные элементы результата не создают никаких тегов в этом методе вывода), но с некоторым терпением все возможно.
Можно также использовать DOE (Disable Output Escapeing), но эта «функция» не является обязательной в спецификации XSLT.и некоторые процессоры XSLT (включая, я думаю, тот, что используется FF) не поддерживают DOE.
Вероятно, лучшее решение (не использующее method="text"
) - это следующее :
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:my="my:my" exclude-result-prefixes="my"
>
<xsl:output omit-xml-declaration="yes" indent="yes" encoding="us-ascii"/>
<my:hex>
<code start="8">€‚ƒ„…†‡ˆ‰Š‹ŒŽ</code>
<code start="9">‘’“”•–—˜™š›œžŸ</code>
<code start="A"> ¡¢£¤¥¦§¨©ª«¬­®¯</code>
<code start="B">°±²³´µ¶·¸¹º»¼½¾¿</code>
<code start="C">ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ</code>
<code start="D">ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß</code>
<code start="E">àáâãäåæçèéêëìíîï</code>
<code start="F">ðñòóôõö÷øùúûüýþÿ</code>
</my:hex>
<xsl:variable name="vHex" select="document('')/*/my:hex/*"/>
<xsl:template match="char">
<xsl:variable name="vchar1" select="substring(@hex,1,1)"/>
<xsl:variable name="vchar2" select="substring(@hex,2,1)"/>
<xsl:variable name="voffset">
<xsl:choose>
<xsl:when test="number($vchar2)">
<xsl:value-of select="$vchar2"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="count($vHex[@start = $vchar2]/preceding-sibling::*)+9"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:value-of select="substring($vHex[@start=$vchar1], $voffset, 1)"/>
</xsl:template>
</xsl:stylesheet>
Когда это преобразование применяется к предоставленному XML-документу :
<char hex="AB"/>
желаемый результат получается :
«
Предполагается, что значения атрибута hex
являются шестнадцатеричными в диапазоне от x80 до xFF.Если необходимо иметь значения в более широком диапазоне, например от x00 до XFF, к элементу my:hex
необходимо соответственно добавить больше элементов
code
.