Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 何时将xml与xsl而不是HTML结合使用?_C#_.net_Php_Xml_Xslt - Fatal编程技术网

C# 何时将xml与xsl而不是HTML结合使用?

C# 何时将xml与xsl而不是HTML结合使用?,c#,.net,php,xml,xslt,C#,.net,Php,Xml,Xslt,我喜欢.NETWebControl,你可以操纵东西,这是大家的共识,但XML和XSL非常棒,因为你有独立于平台和语言的UI逻辑,所以有一天我会将应用程序更改为php、java或其他任何形式,我可以重用所有的表示逻辑。 此外,XSL还可以在呈现之前调用.NET(或其他)方法 您通常什么时候使用XML/XSL?为什么不更频繁地使用它呢?在ASP.NET的东西中没有这么多,但在那之前(使用VB6),我几乎只在服务器上使用它来将xml转换为html。我一直觉得它的用途非常广泛。我还在我的“”项目中使用它

我喜欢.NETWebControl,你可以操纵东西,这是大家的共识,但XML和XSL非常棒,因为你有独立于平台和语言的UI逻辑,所以有一天我会将应用程序更改为php、java或其他任何形式,我可以重用所有的表示逻辑。 此外,XSL还可以在呈现之前调用.NET(或其他)方法


您通常什么时候使用XML/XSL?为什么不更频繁地使用它呢?

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

现在,我正在研究ASP.NET MVC,它不一定非常适合xsl——尽管在某些方面,

之间的差别不大,而不是HTML

我经常使用它来代替asp.net控件,因为它为2.0中的V和C提供了分离关注点的功能,而在.NET2.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);
    }
}
公共类xsltmanager
{
/*构造函数(singleton),它在您选择的路径中为*.xsl定义一个文件监视程序*/
//只是一个线程安全互斥体
私有对象互斥=新对象();
//缓存XslCompiledTransforms
私有字典cTransforms=新字典();
公共XslCompiledTransform获取(字符串标识符)
{       
如果(!this.cTransforms.ContainsKey(标识符))
{
锁(this.Mutex)
{
如果(!this.cTransforms.ContainsKey(标识符))
{
XslCompiledTransform xslDoc=新的XslCompiledTransform();
加载(/*基于标识符的文件路径*/);
this.cTransforms.Add(标识符,xslDoc);
}
}
}
返回此.cTransforms[标识符];
}
/*其他util xslt方法-名称空间清洗、文档合并等等*/
}
公共类myPage:System.Web.UI.Page
{
受保护的无效页面加载(对象发送方、事件参数e)
{
//获取源数据
XPathDocument xPathDoc=myGetXMLMethod();
//变换参数
XsltArgumentList oArgs=new XsltArgumentList();
/*根据需要添加参数*/
//在这里直接获取并执行对响应的转换
xsltmanager.instance.get(@“foo\bar\baz”).Transform(xPathDoc、oArgs、Response.OutputStream);
}
}

使用XML/XSL会带来巨大的开销,并且有许多缺点

  • 您需要一个完整的XML数据集来确保XSL仅用作逻辑引擎
  • 其次,XSL逻辑控制很差,版本之间不一致
  • 第三,组合过程相当繁重,不适合大型场地

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

    首先,我在需要以HTML形式表示信息时使用XSLT。在过去的七年里,每当我偏离这一点,我都会后悔。我在Python中生成HTML的短暂经验是我遇到的唯一可能替代它的东西。

    如何将它与.NET集成?基本上只是根据codebehind中的Response.OutputStream进行转换。如果你不介意,你能提供一些.aspx(或其他)的集成代码吗使用xml/xsl?非常感谢,我拒绝所有这一切:xsl不是一个逻辑引擎,它是一个表示引擎。XSLT的模板化“逻辑”非常强大,在任何给定框架中都非常一致。鉴于该语言是为模板设计的,它的速度也非常快。缓存以避免文件IO并使用XPathdoct。这个答案在所有细节上都与我的经验完全相反。我甚至不知道“XSL逻辑控制很差”可能是什么意思。