2012-12-15 5 views
0

Je retourne XML à partir d'un contrôleur d'action en utilisant un ActionResult personnalisé:application XSLT XML dans Asp.NET MVC

public class XmlActionResult : ActionResult 
{ 
    /// <summary> 
    /// This class is a custom ActionResult that outputs the content of an XML document to the response stream 
    /// </summary> 

    private readonly XDocument _document; 
    public Formatting Formatting { get; set; } 
    public string MimeType { get; set; } 

    public XmlActionResult(XDocument document) 
    { 
     _document = document; 
     MimeType = "text/xml"; 
     Formatting = Formatting.None; 

    } 

    public override void ExecuteResult(ControllerContext context) 
    { 
     context.HttpContext.Response.Clear(); 
     context.HttpContext.Response.ContentType = MimeType; 

     using(var writer = new XmlTextWriter(context.HttpContext.Response.OutputStream, null) 
      { 
       Formatting = Formatting 

      }) 

     _document.WriteTo(writer); 
    } 
} 

Ce produit l'arbre XML au navigateur. J'ai un fichier XSL qui transforme le XML, comment j'appliquerais la feuille de style à la sortie XML?

+3

Veuillez arrêter de vous référer à "ASP.NET MVC" simplement comme "MVC". L'un est un cadre, tandis que l'autre est un modèle de conception indépendant du langage. C'est comme appeler IE - "l'Internet" –

+0

C'est un point juste, des excuses! –

+0

Où souhaitez-vous appliquer la transformation XSLT - sur le serveur ou sur le navigateur client? –

Répondre

0

Use XslCompiledTransform to apply any XSLT 1.0 stylesheet ou d'utiliser des processeurs XSLT 2.0 tiers tels que Saxon 9 ou XmlPrime pour appliquer une feuille de style XSLT 2.0.

Vous pouvez transmettre votre XDocument en tant que premier argument de la méthode Transform de XslCompiledTransform en appelant la méthode d'extension CreateNavigator, par exemple.

XslCompiledTransform proc = new XslCompiledTransform(); 
proc.Load("sheet.xsl"); 
poc.Transform(_document.CreateNavigator(), null, context.HttpContext.Response.OutputStream); 

Pour utiliser la méthode d'extension que vous avez besoin d'une directive using System.Xml.XPath;. Et selon le résultat de la transformation (ex: HTML pour le type de contenu text/html ou XHTML pour l'application de type de contenu/xhtml + xml ou un autre format), vous pouvez changer le ContentType que vous envoyez au navigateur pour que le résultat de la transformation est analysé et rendu de manière appropriée.