我有一些可以正常工作多年的代码,但是最近在更新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库?
答案 0 :(得分:0)
我使用的是Windows版本1803,但也可以确认该版本的问题。但是,这里的测试代替了
oXSLProcessor.addParameter("myParameter", "Override");
使用
oXSLProcessor.addParameter("myParameter", "Override", "");
为我解决了这个问题,因此您可以尝试一下,即不要提供未提供名称空间的第三个参数来显式传递空字符串。