0

我使用自定义 ActionResult 从控制器 Action 返回 XML:

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

这会将 XML 树输出到浏览器。我有一个转换 XML 的 XSL 文件,如何将样式表应用于 XML 输出?

4

1 回答 1

0

用于XslCompiledTransform应用任何 XSLT 1.0 样式表或使用第三方 XSLT 2.0 处理器(如 Saxon 9 或 XmlPrime)应用任何 XSLT 2.0 样式表。

您可以通过调用扩展方法将您的 XDocument 作为Transform方法的第一个参数传递,例如XslCompiledTransformCreateNavigator

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

要使用扩展方法,您需要一个using System.Xml.XPath;指令。并且根据转换结果(例如,对于内容类型 text/html 是 HTML 还是对于内容类型 application/xhtml+xml 或其他格式的 XHTML),您可能希望更改发送到浏览器的 ContentType,以便转换结果被适当地解析和呈现。

于 2012-12-16T12:40:24.013 回答