Привет всем, я конвертирую текст внутри
Элемент документа XML на гиперссылку
используя следующее:
<xsl:value-of select="replace(AUTHOR_CONTACT_INFORMATION,
'(RegEx здесь)', ' $ 1 ') "
К сожалению, я не могу избежать "<"
& '>' теги, используемые в href
Краткий ответ : Вы даже не должны пытаться это делать.
Экранирующая разметка переводит ее в одномерный текст, и она будет отображаться только как текст в браузере.
Правильный способ сделать это - сгенерировать разметку в виде (последовательности) литеральных элементов результата:
<xsl:template match="AUTHOR_CONTACT_INFORMATION">
<a href="{someExpression}"><xsl:value-of select="someExpr2"/></a>
</xsl:template>
ОБНОВЛЕНИЕ : ОП предоставила больше информации о реальной проблеме. Проблема в том, что следующее не работает на его XSLT-процессоре - Qt4 ???
<xsl:analyze-string select="AUTHOR_CONTACT_INFORMATION" regex="(abc@yahoo.com)">
<xsl:matching-substring>
<a href="{.}">
<xsl:value-of select="." />
</a>
</xsl:matching-substring>
<xsl:non-matching-substring>
<xsl:value-of select="." />
</xsl:non-matching-substring>
</xsl:analyze-string>
Я проверил, что этот код ведет себя как ожидалось и дает ожидаемый результат при запуске под Saxon 9.1.05.
Это означает, что Qt4 не является совместимым процессором XSLT 2.0.
Здесь я могу предложить следующее альтернативное решение , которое работает как с процессором XSLT 1.0, так и с процессором XSLT 2.0:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="AUTHOR_CONTACT_INFORMATION">
<xsl:value-of select=
"substring-before(., 'abc@yahoo.com')"/>
<a href="abc@yahoo.com">abc@yahoo.com</a>
<xsl:value-of select=
"substring-after(., 'abc@yahoo.com')"/>
</xsl:template>
</xsl:stylesheet>
когда это преобразование применяется к предоставленному документу XML:
<AUTHOR_CONTACT_INFORMATION>Plugin author can be reached at abc@yahoo.com for his email.</AUTHOR_CONTACT_INFORMATION>
желаемый, правильный результат получается (со всеми 8 различными процессорами XSLT, которые у меня есть):
Plugin author can be reached at <a href="abc@yahoo.com">abc@yahoo.com</a> for his email.