XSLT-преобразование ложно заменяет символы - PullRequest
0 голосов
/ 04 марта 2011

У меня есть следующий XSLT код:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="POL">
    <sql:SQLXML>
        <sql:Execute as="Test" into="Test">
            <sql:SQL>
                select trans_type, trans_datetime, replace(convert(varchar, trans_datetime, 114), ':', '_') as trans_time, application_data from Acord_Transaction where transaction_id=
                <xsl:value-of select="TRANSACTIONID" />
            </sql:SQL>
        </sql:Execute>
        <xsl:if test="string-length(APPLICATIONDATA/parameters/noteid) &gt; 0">
            <sql:Execute as="newnote" into="newnotes">
                <sql:SQL>
                    select * from notes where note_id=
                    <xsl:value-of select="APPLICATIONDATA/parameters/noteid" />
                    AND added_date='
                    <xsl:value-of select="APPLICATIONDATA/parameters/addeddate" />
                    '
                </sql:SQL>
            </sql:Execute>
        </xsl:if>
</xsl:template>

Проблема:

APPLICATIONDATA isстроковое поле, которое инициализируется из базы данных и содержит код XML.После завершения sql:execute выходные данные < и > заменяются на &lt и &gt.

Мне нужен шаблон, который будет применен после sql:execute, так что результатвыполнения становится действительным XML-кодом.Затем я могу запустить XPath с xsl:if на нем.

Ответы [ 3 ]

0 голосов
/ 04 марта 2011

Как сказал Джеймс, в XSLT нет способа сделать это.Тем не менее, в зависимости от вашего механизма синтаксического анализа, есть конкретные способы для достижения этой цели.Посмотрите этот пост для пары идей: XSLT;разбирать экранированный текст в наборе узлов и извлекать подэлементы

0 голосов
/ 04 марта 2011

XSLT работает с древовидными структурами (XML), которые являются двумерными).

В базе данных у вас есть серьезно уничтоженная разметка, сведенная в одномерную строку.

Это варварское действие должно быть отменено путем удаления экранированных символов, тогда восстановленный XML может быть обработан с помощью XSLT как обычно.

Самоэкранирование может быть выполнено с использованием XSLT 2.0, но нет абсолютно никаких веских причин, по которым для этого следует использовать XSLT.

0 голосов
/ 04 марта 2011

К сожалению, нет надежного или встроенного способа сделать это в обычном XSLT.Если возможно, вам не следует хранить данные XML в вашей базе данных с разметкой, экранированной таким образом.См .: Проблема с XSL-символом

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...