Проблема с функцией добавления параметров процессора XSL - PullRequest
0 голосов
/ 02 октября 2018

У меня есть код, который работал годами, но недавно прекратил работу после обновления до Windows 10 v1709.Функция IXSLProcessor.addParameter перестала работать при использовании процессора, возвращаемого XSLTemplate60.CreateProcessor ().Вот простой фрагмент консоли, который показывает проблему:

C #:

class Program
{
    static void Main(string[] args)
    {
        FreeThreadedDOMDocument60 oXSLDocument = new FreeThreadedDOMDocument60();
        XSLTemplate60 oXSLTemplate = new XSLTemplate60();
        IXSLProcessor oXSLProcessor;

        oXSLDocument.load(@"ParameterTest.xslt");
        oXSLTemplate.stylesheet = oXSLDocument;
        oXSLProcessor = oXSLTemplate.createProcessor();

        oXSLProcessor.input = new DOMDocument60();

        Console.WriteLine("\nThis should say that the value of myParameter is \"Default\":");
        oXSLProcessor.transform();
        Console.WriteLine(oXSLProcessor.output);

        oXSLProcessor.addParameter("myParameter", "Override");
        Console.WriteLine("\nThis should say that the value of myParameter is \"Override\":");
        oXSLProcessor.transform();
        Console.WriteLine(oXSLProcessor.output);

        Console.WriteLine();
        Console.ReadKey();
    }
}

XSLT:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html" omit-xml-declaration="yes" indent="no" />
    <xsl:param name="myParameter" select="'Default'" />
    <xsl:template match="/">
        My parameter is set to: <xsl:value-of select="$myParameter" />
    </xsl:template>
</xsl:stylesheet>

Токовый выход:

This should say that the value of myParameter is "Default":

            My parameter is set to: Default

This should say that the value of myParameter is "Override":

            My parameter is set to: Default

Как я уже говорил, раньше это работало правильно, и я могу воссоздать правильное поведение, используя Windows 10 v1603.Единственный совет, который я могу найти в отношении того, что может происходить, - это KB4088776 с марта прошлого года, в котором упоминаются исправления безопасности для библиотеки MSXML.Кто-нибудь знает, что я могу сделать, чтобы сделать эту работу снова, не включая переключение используемой библиотеки XML / XSL?

1 Ответ

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

Я нахожусь на Windows версии 1803, но могу также подтвердить проблему на этой версии.Однако тест, который заменяет

    oXSLProcessor.addParameter("myParameter", "Override");

на

        oXSLProcessor.addParameter("myParameter", "Override", "");

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

...