我的代码背后的代码来自ASPX网页使用 transform.xsl 进行一些自定义XSLT转换。

方案1: :尝试从_layouts文件夹获取文件。

SPWeb web = SPContext.Current.Web;
SPFile file = web.GetFile(@"/layouts/MyFeature/transform.xsl");

注意:该URL上可以使用该文件 http:// mysite:8080/_layouts/myfeature/transform.xsl 使用浏览器时。

方案2: :尝试从当前(http:// mysite:8080/myFeature/mypage.aspx)URL获取文件。

SPWeb web = SPContext.Current.Web;
SPFile file = web.GetFile(@"transform.xsl");

或者

SPFile file = web.GetFile(@"MyFeature/transform.xsl");

或者

SPFile file = web.GetFile(@"/MyFeature/transform.xsl");


所有场景都失败了,如何解决这个问题?

解决方案
“ transform.xsl”现在位于“ myFeature/transform.xsl”上,我已经跟随Anders Rask的提示,现在我的代码看起来像这样:

SPWeb web = SPContext.Current.Web;
XslCompiledTransform transformer = new XslCompiledTransform();

XsltSettings settings = new XsltSettings(true, true);
string xslLocation = web.Url + "/FormWrapper/transform.xsl";
transformer.Load(xslLocation, settings, GetResolverWithDefaultCredentials());

// Do XSLT transform...
有帮助吗?

解决方案

我很确定spweb.getfile()返回您的网站页面,例如default.aspx。另外,如果您的XSLT文件位于_layouts文件夹中,则不是SPFILE。

而是尝试类似于下面代码的内容(注意样板代码,因此应添加错误处理等)

// fetch xsl processor
XslCompiledTransform processor = GetXslt(@"/layouts/MyFeature/transform.xsl");
StringWriter writer = new StringWriter(CultureInfo.CurrentCulture);

// Transform XSLT code here


private static XslCompiledTransform GetXslt(string xsltUrl)
{
    XslCompiledTransform processor = new XslCompiledTransform(false);
    bool enableDocumentFunctions = true;
    bool enableScript = true;
    XsltSettings settings = new XsltSettings(enableDocumentFunctions, enableScript);

    // add error handling here
    processor.Load(xsltUrl, settings, GetResolverWithDefaultCredentials());
    return processor;
}

// use resolver to avoid getting security exceptions
private static XmlUrlResolver GetResolverWithDefaultCredentials()
{
    XmlUrlResolver resolver = new XmlUrlResolver();
    resolver.Credentials = System.Net.CredentialCache.DefaultCredentials;
    return resolver;
}

其他提示

您可以编写一个模块功能,该功能将您的transform.xsl“上传”到文档库(例如样式库)中,该功能使您可以访问该文件作为SPFile。

许可以下: CC-BY-SA归因
scroll top