XSL处理器的添加参数功能出现问题

时间:2018-10-01 22:18:08

标签: c# xslt parameter-passing msxml

我有一些可以正常工作多年的代码,但是最近在更新Windows 10 v1709之后停止了。使用XSLTemplate60.CreateProcessor()返回的处理器时,IXSLProcessor.addParameter函数已停止工作。这是一个显示问题的简单控制台代码:

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,它来自3月,提到了MSXML库的安全修复程序。有谁知道我能做些什么来再次进行这项工作,而这还不包括切换我正在使用的XML / XSL库?

1 个答案:

答案 0 :(得分:0)

我使用的是Windows版本1803,但也可以确认该版本的问题。但是,这里的测试代替了

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

使用

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

为我解决了这个问题,因此您可以尝试一下,即不要提供未提供名称空间的第三个参数来显式传递空字符串。