Question

Mon code derrière le code de la page Web ASPX utilise un transform.xsl pour faire une transformation xslt personnalisée.

Scénario 1 :. Essayez d'obtenir le fichier à partir du dossier _layouts

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

Remarque: Le fichier est accesible sur cette URL http: // monsite: 8080 / _layouts / MyFeature /transform.xsl lors de l'utilisation du navigateur.

Scénario 2 : Essayez d'obtenir le fichier du courant (http: // monsite: 8080 / MyFeature / MyPage.aspx). Url

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

ou

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

ou

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


Tous les scénarios échouent, comment résoudre ce problème?

Solution
Le « transform.xsl » est maintenant situé à 'MyFeature / transform.xsl et je l'ai suivi la pointe de Anders Rask, et mon apparence de code comme ceci maintenant:

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...
Était-ce utile?

La solution

Je suis assez sûr SPWeb.GetFile () retourne vos pages du site, comme default.aspx. Aussi votre fichier XSLT nest pas un SPFile s'il se trouve dans le dossier _layouts.

Au lieu de tenter quelque chose de similaire au-dessous du code (note code boilerplate si la gestion des erreurs, etc. doivent être ajoutés)

// 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;
}

Autres conseils

Vous pouvez écrire un module Feature « que » votre uploads transform.xsl dans une bibliothèque de documents (style bibliothèque par exemple) qui vous permet d'accéder au fichier en tant que SPFile.

Licencié sous: CC-BY-SA avec attribution
Non affilié à sharepoint.stackexchange
scroll top