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...
War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit sharepoint.stackexchange
scroll top