XslCompiledTransform: значения атрибута неправильно закодированы - PullRequest
0 голосов
/ 27 июля 2011

Я использую XslCompiledTranform для преобразования XML / XSL.

Это мой тест XSL:

<span title="{./tooltip}" anattribute="{./tooltip}">
<xsl:value-of select="./tooltip"/>
</span>

Вы видите, что для тестирования я ставлю то же значение XSL,а именно @tooltip в атрибут title, неопределенный атрибут anattribute, а также в виде текста в узел.

В моем XML код @tooltip кодируется как "this is a &lt;script&gt; tag".Чтобы быть более точным: в значении нет HTML-тегов.Все закодировано, следовательно, &lt; и &gt;

Если я преобразую вышеприведенное, я получу в результате:

<span title="this is a <script> tag" anattribute="this is a <script> tag">
this is a &lt;script&gt; tag
</span>

Почему сохраняется кодировка для значений узлов и почемуподстановка закодированных значений для атрибутов?И самое главное: как я могу остановить XslCompiledTransform от такого поведения?Я хочу, чтобы мои атрибуты точно были такими, как я их указал, и магическое преобразование не происходило.

Мои настройки следующие:

var oXSL = new XslCompiledTransform( );
XsltSettings oXslSettings = new XsltSettings( );
XmlUrlResolver oUriResolver = new XmlUrlResolver( );
oXslSettings.EnableDocumentFunction = true;
oXslSettings.EnableScript = false;
oXSL.Load( sXslPath, oXslSettings, oUriResolver );

René

1 Ответ

0 голосов
/ 27 июля 2011

Метод вывода html не должен экранировать <символы, встречающиеся в значениях атрибута. </p>

Для получения дополнительной информации прочитайте спецификацию: http://www.w3.org/TR/xslt#section-HTML-Output-Method

Использование <xsl:output method="xml"/>

Входной XML:

<root>
    <tooltip>this is a &lt;script&gt; tag</tooltip>
</root>

XSLT:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes"/>

    <xsl:template match="root">
        <span title="{tooltip}" anattribute="{tooltip}">
            <xsl:value-of select="tooltip"/>
        </span>
    </xsl:template>
</xsl:stylesheet>

Исходный код C #:

var oXSL = new XslCompiledTransform();
XsltSettings oXslSettings = new XsltSettings();
XmlUrlResolver oUriResolver = new XmlUrlResolver();
oXslSettings.EnableDocumentFunction = true;
oXslSettings.EnableScript = false;
oXSL.Load(@"1.xslt", oXslSettings, oUriResolver);    
oXSL.Transform(@"input.xml", @"output.xml");

Выход:

<?xml version="1.0" encoding="utf-8"?>
<span title="this is a &lt;script&gt; tag" anattribute="this is a &lt;script&gt; tag">this is a &lt;script&gt; tag</span>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...