Я предполагаю, что у вас действительно есть две проблемы здесь, и что они не связаны.
Первая проблема: код не выполняется
Вы пытаетесь выполнить код XSLT непосредственно внутри шаблона. Шаблон принимает только то, что вы обычно находите на странице ASPX (например, HTML, серверные элементы управления, зарегистрированные элементы управления Umbraco и т. Д.), И не будет анализировать какие-либо конструкции XSLT, а выводит их непосредственно в источник, как показано в вашем вопросе.
Вам потребуется создать файл XSLT в разделе для разработчиков вместе с соответствующим макросом, который обычно создается автоматически вместе с XSLT. Затем вы просто импортируете макрос в шаблон.
Фрагмент шаблона:
<umbraco:Macro Alias="MyMacro" runat="server" />
Фрагмент XSLT:
<a href="{umbraco.library:NiceUrl($currentPage/../@id)}">
<xsl:value-of select="$currentPage/../@nodeName" />
</a>
Вторая проблема: изображение не отображается
Странно, что Umbraco подготавливает символ ~
, поскольку ваш код действительно правильный (он работает на моем Umbraco - Версия 4.7.1). В качестве обходного пути попробуйте создать файл XSLT и использовать следующий код XSLT. По крайней мере, с помощью XSLT вы можете использовать логику кодирования, которая потребуется, когда ваши страницы станут более сложными.
XSLT-фрагмент:
<xsl:if test="$currentPage/articlePhoto != ''">
<img src="{$currentPage/articlePhoto}" />
</xsl:if>
Надеюсь, это поможет.