HTML-тег XSL не отображается как HTML в параметризованной строке в файле свойств - PullRequest
0 голосов
/ 19 октября 2018

Привет! У меня проблема с отображением определенного элемента в параметризованном строковом значении в файле свойств в xslt2.0.

У меня есть файл свойств со следующим свойством:

user.no_reply=Add {0} to your address book to make sure that you receive our notifications

Мой шаблон:

<xsl:template name="disclaimer">

    <xsl:param name="notification-sender"/>

    <text type="text">
        <xsl:attribute name="stringParam0">
            <xsl:copy-of select="$notification-sender"/>
        </xsl:attribute>
        <xsl:text>user.no_reply</xsl:text>
    </text>
</xsl:template>

И параметр, который я ожидаю передать в шаблон.

<xsl:call-template name="disclaimer">
                    <xsl:with-param name="notification-sender">
                        <text type="link" new-line="false">
                            <xsl:attribute name="href">mailto:<xsl:value-of select="notificationSender"/>
                            </xsl:attribute>

                            <xsl:attribute name="style">
                                <xsl:value-of select="'text-decoration: underline; color: #868686'"/>
                            </xsl:attribute>

                            <xsl:value-of select="notificationSender"/>
                        </text>
                    </xsl:with-param>
</xsl:call-template>

Вывод такой:

Добавьте в свою адресную книгу, чтобы убедиться, что вы получаете наши уведомления

Письмо не заполнено, поэтому в нем есть пустое место, где был указан параметр.

Было ли ожидалось, чтополный html в строке:

Add <a href="mailto:whatever" style="text-decoration: underline; color: #868686">whatever</a>  to your address book to make sure that you receive our notifications

Если я использую значение данного параметра, отображается только значение внутри тегов привязки.Есть идеи, как мне добиться ожидаемого поведения?

Спасибо.

1 Ответ

0 голосов
/ 19 октября 2018

Я не знаю, как ваш файл свойств связан с вашим XSLT, но в вашем XSLT вы создаете элемент text с узлом атрибута stringParam0, который, по-видимому, вы хотите заполнить сериализованным представлением некоторого другого результатаэлемент (то есть xsl:copy-of select="$notification-sender", кажется, пытается это).Однако значение атрибута создается из строки выражения select или конструктора последовательности (https://www.w3.org/TR/xslt20/#creating-attributes, https://www.w3.org/TR/xslt20/#constructing-simple-content), поэтому вы не можете ожидать появления какой-либо разметки XML в значении атрибута, если вы не введетеэто там явно.

Если вы можете, перейдите на XSLT 3 (в мире Java, поддерживаемом открытым исходным кодом Saxon HE 9.8 или 9.9) и используйте функцию XPath 3 serialize https://www.w3.org/TR/xpath-functions/#func-serialize в

<xsl:attribute name="stringParam0" select="serialize($notification-sender)"/>

или, конечно, непосредственно в

<text type="text" stringParam0="{serialize($notification-sender)}">..</text>

Для XSLT 2 вам необходимо проверить, поддерживает ли ваш процессор XSLT 2 расширение, аналогичное функции XSLT / XPath 3.0 serializeили вам нужно будет реализовать это самостоятельно или использовать существующие библиотеки, такие как http://lenzconsulting.com/xml-to-string/.

...