XSL是
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
exclude-result-prefixes="msxsl"
xmlns:cs="urn:cs">
<msxsl:script language="C#" implements-prefix="cs">
<msxsl:using namespace="System.IO" />
<![CDATA[public void f(){}]]>
</msxsl:script>
<xsl:output method="text" />
<xsl:template name="abc" />
</xsl:stylesheet>
使用XslCompiledTransform
我可以使用以下代码轻松验证此XSL:
var xslTransform = new XslCompiledTransform();
using (var stream = new FileStream(XSL_PATH, FileMode.Open))
{
using (var reader = XmlReader.Create(stream))
{
xslTransform.Load(reader, new XsltSettings(false, true), new XmlUrlResolver());
}
}
但是,如果我试图使用过时的(我有理由)XslTransform
,如下所示:
var xslTransform = new XslTransform();
using (var stream = new FileStream(XSL_PATH, FileMode.Open))
{
using (var reader = XmlReader.Create(stream))
{
xslTransform.Load(reader/*, new XsltSettings(false, true)*/, new XmlUrlResolver());
}
}
我得到'msxsl:script'元素不能为空。
为什么?
答案 0 :(得分:0)
我可以提出的最简单的测试用例
XslTransform proc = new XslTransform();
proc.Load("XSLTFile1.xslt");
proc.Transform("XMLFile1.xml", "result1.txt");
文件
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:mf="http://example.com/mf"
exclude-result-prefixes="msxsl mf"
>
<xsl:output method="text" />
<msxsl:script implements-prefix="mf" language="C#">
public string Foo(string input) {
return input.ToUpper();
}
</msxsl:script>
<xsl:template match="test">
<xsl:value-of select="mf:Foo(.)"/>
</xsl:template>
</xsl:stylesheet>
和
<test>foo</test>
编译并运行正常,输出文件为FOO
。根据文档,msxsl:script
受支持,msxsl:using
但未提及,因此请尝试删除它。