2015-12-11 29 views
0

的XSL是嘗試使用的XslTransform以驗證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

最簡單的測試情況下,我能想出的用途

 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,所以嘗試刪除它。

+0

刪除使用作品。謝謝。 – mark