Wie greife ich im aktuellen URL- oder _Layouts -Ordner auf eine Datei zu?
Frage
Mein Code hinter Code von der ASPX -Webseite verwendet a transform.xsl Um eine benutzerdefinierte XSLT -Transformation durchzuführen.
Szenario 1: Versuchen Sie, die Datei aus dem Ordner _layouts zu erhalten.
SPWeb web = SPContext.Current.Web;
SPFile file = web.GetFile(@"/layouts/MyFeature/transform.xsl");
Hinweis: Die Datei ist auf dieser URL zugänglich http: // mySite: 8080/_layouts/myFeature/transform.xsl Bei Verwendung des Browsers.
Szenario 2: Versuchen Sie, die Datei aus dem aktuellen (http: // mySite: 8080/myFeature/myPage.aspx) URL zu erhalten.
SPWeb web = SPContext.Current.Web;
SPFile file = web.GetFile(@"transform.xsl");
oder
SPFile file = web.GetFile(@"MyFeature/transform.xsl");
oder
SPFile file = web.GetFile(@"/MyFeature/transform.xsl");
Alle Szenarien scheitern, wie kann ich das lösen?
Lösung
Das 'Transform.xsl' befindet sich jetzt in 'myfeature/transform.xsl' und ich habe dem Tipp von Anders Rask gefolgt, und mein Code sieht jetzt so aus:
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...
Lösung
Ich bin mir ziemlich sicher, dass SPWeb.getFile () Ihre Site -Seiten wie default.aspx zurückgibt. Auch Ihre XSLT -Datei ist kein SPFILE, wenn sie sich im Ordner _layouts befindet.
Versuchen Sie stattdessen etwas Ähnliches wie der folgende Code (Hinweis Boilerplate -Code, sodass Fehlerbehandlungen usw. hinzugefügt werden sollten).
// 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;
}
Andere Tipps
Sie können eine Modulfunktion schreiben, die Ihre Transformation.xSL in eine Dokumentbibliothek (z. B. Stilbibliothek) "hochladen", mit der Sie als SPFILE auf die Datei zugreifen können.