【问题标题】:When to use xml with xsl instead of HTML?何时将 xml 与 xsl 一起使用而不是 HTML?
【发布时间】:2008-12-23 10:11:32
【问题描述】:

我喜欢 .NET 网络控件,而你操纵事物,这是普遍的共识,但 XML 和 XSL 非常棒,因为你有独立于平台和语言的 UI 逻辑,所以有一天我将应用程序更改为 php、java 或不管怎样,我都可以重用所有的表示逻辑。 此外,XSL 可以在渲染之前调用 .NET(或其他)方法。

你什么时候正常使用XML/XSL?为什么不更频繁地使用它?

【问题讨论】:

    标签: c# .net php xml xslt


    【解决方案1】:

    而不是 HTML?

    我经常使用它来代替 asp.net 控件,因为它提供了 2.0 中 V 和 C 的关注点分离,而 .NET 2.0 开箱即用。

    显然还有一百万种与 asp.net 控件无关的其他用途。


    编辑:实现的草图

    public class xsltmanager
    {
        /* constructor (singleton) which defines a file watcher for *.xsl in the path of your choice */
    
        //just a mutex for thread safety
        private object Mutex = new object();
    
        //caching XslCompiledTransforms
        private Dictionary<string, XslCompiledTransform> cTransforms = new Dictionary<string, XslCompiledTransform>();
    
        public XslCompiledTransform fetch(string identifier)
        {       
            if (!this.cTransforms.ContainsKey(identifier))
            {
                lock (this.Mutex)
                {
                    if (!this.cTransforms.ContainsKey(identifier))
                    {
                        XslCompiledTransform xslDoc = new XslCompiledTransform();
                        xslDoc.Load(/* file path based on identifier */);
    
                        this.cTransforms.Add(identifier, xslDoc);
                    }
                }
            }
            return this.cTransforms[identifier];
        }
    
        /* other util xslt methods - namespace wash, doc merge, whatever */
    }
    
    public class myPage : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            //get source data
            XPathDocument xPathDoc = myGetXMLMethod();
    
            //transform params
            XsltArgumentList oArgs = new XsltArgumentList();
    
            /* add params as required */
    
            //fetching and executing the transform directly to the Response here
            xsltmanager.instance.get(@"foo\bar\baz").Transform(xPathDoc, oArgs, Response.OutputStream);
        }
    }
    

    【讨论】:

    • 如何将它与 .NET 集成?
    • 基本上只是在代码隐藏中针对 Response.OutputStream 进行转换。
    • 如果您不介意,能否提供一些将 .aspx(或其他)与 xml/xsl 集成的代码?提前谢谢
    【解决方案2】:

    首先,当我需要将信息呈现为 HTML 时,我会使用 XSLT。在过去的七年里,几乎每次我偏离这一点时,我都会后悔。我在 Python 中生成 HTML 的简短经验是我遇到的唯一可能能够替代它的东西。

    【讨论】:

      【解决方案3】:

      在 ASP.NET 方面并没有那么多,但在此之前(使用 VB6)我过去几乎只使用它(在服务器上)将 xml 转换为 html。我一直觉得它用途广泛。我还在我的“protocol buffers”项目中使用它作为代码生成器引擎:主框架生成 xml,然后我使用 xsl 转换生成 C#。我听人说他们不觉得 xsl 直观,但我真的很喜欢它,而且它是我处理 xml 时的默认 ttool。

      现在,我正在研究 ASP.NET MVC,它不一定非常适合 xsl - 尽管在某些方面,&lt;%=foo.Name%&gt;&lt;xsl:value-of select="Name"/&gt; 之间没有太多关系。

      【讨论】:

        【解决方案4】:

        使用 XML/XSL 的开销很大,并且有很多缺点。

        1. 您需要完整的 XML 数据集以确保 XSL 仅用作逻辑引擎。
        2. 第二,XSL逻辑控制差,版本间不一致。
        3. 第三,组合过程相当繁重,不适合大型站点。

        如果您担心逻辑分离,请使用一些模板语言(不是 XSL)。

        【讨论】:

        • 我拒绝所有这些:XSL 不是一个逻辑引擎,它是一个表示引擎。 XSLT 的模板“逻辑”非常强大,并且在任何给定框架内都非常一致。鉴于该语言是为模板设计的,它也非常快。缓存避免文件 IO 并使用 XPathDoc
        • 这个答案与我在所有细节上的经验完全相反。我什至不知道“XSL 逻辑控制很差”可能意味着什么。
        猜你喜欢
        • 1970-01-01
        • 2013-03-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-10
        • 2012-02-22
        • 2013-04-26
        • 1970-01-01
        相关资源
        最近更新 更多