何时使用XML和XSL而不是HTML?

3
我喜欢.NET webcontrols,你可以操作事物,这是共识,但XML和XSL非常好,因为你有平台和语言无关的UI逻辑,所以有一天我改变应用程序到php、java或其他任何东西,我可以重用所有的演示逻辑。此外,在呈现之前,XSL有调用.NET(或其他)方法的可能性。
通常什么时候使用XML/XSL?为什么不更频繁地使用它们呢?
4个回答

2

大致上来说,每当我需要将信息呈现为HTML时,我都会使用XSLT。在过去的七年里,每次我偏离这个方法后,我都感到后悔。我曾尝试使用Python生成HTML,但只是短暂的经验,可能无法取代XSLT。


2

除了HTML,还有其他替代品吗?

我经常使用它来代替asp.net控件,因为它可以在2.0版本中实现关注点分离,而这是你在.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集成? - netadictos
基本上只是在代码后台中针对 Response.OutputStream 进行转换。 - annakata
如果您不介意的话,能否提供一些将.aspx(或其他)与xml / xsl集成的代码?提前致谢。 - netadictos

1

在ASP.NET方面不是很擅长,但在VB6时期我几乎专门使用它(在服务器上)将xml转换为html。我一直觉得它非常灵活多用途。我还在我的“protocol buffers”项目中使用它作为代码生成引擎:主要框架生成xml,然后我使用xsl转换来输出C#代码。我听说有人说他们不觉得xsl直观,但我真的很喜欢它,并且在处理xml时它是我的默认工具。

现在,我正在密切关注ASP.NET MVC,它并不一定适合使用xsl - 尽管在某些方面,<%=foo.Name%><xsl:value-of select="Name"/>之间并没有太大区别。


-3

使用XML / XSL存在巨大的开销,并且存在许多缺点。

  1. 您需要完整的XML数据集,以确保仅将XSL用作逻辑引擎。
  2. 其次,XSL逻辑控制较差,并且在版本之间不一致。
  3. 第三,组合是相当繁重的过程,不适用于大型网站。

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


我拒绝这一切:XSL不是逻辑引擎,而是演示引擎。XSLT的模板“逻辑”非常强大,在任何给定框架内都非常一致。由于该语言是为模板设计的,因此它也非常快速。缓存以避免文件IO并使用XPathDoc。 - annakata
这个回答在所有方面都与我的经验完全相反。我甚至不知道“XSL逻辑控制很差”可能意味着什么。 - Robert Rossney

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接