zoukankan      html  css  js  c++  java
  • ASP.NET mvc 自定义XSLT视图引擎 遇到的问题【高手请进有疑难杂症】

    直接采用XmlReader.Create(fs);会报错误 缺少根节点 这是什么原因,应该怎么做请高手路过时看看

    用其他的方式实现视图引擎,可能很难实现强类型的model,而采用XSLT作为视图引擎则可以实现

    可以将实体对象序列化为XML,xml在解析为html这样就实现了强类型的MODEL

    今天在试验时发现个问题,始终未能直接解决,

    XmlReader.Create(fs);会报缺少根节点呢 fs为一个MemoryStream

    代码如下

    1强类型的MODEL

     [Serializable]
        public class ChangePasswordModel
        {
          
            public string OldPassword { get; set; }
    
         
            public string NewPassword { get; set; }
    
            
            public string ConfirmPassword { get; set; }
        }
    2xsltView:IView

    进行解析

      void IView.Render(ViewContext viewContext, System.IO.TextWriter writer)
            {
              
    
                XslCompiledTransform transform = new XslCompiledTransform();
                //xslt文件的路径
              
                string XsltFileDir =System.Web.HttpContext.Current.Server.MapPath(_xsltPhysicalPath);
                try
                {
                    //XsltSettings myxsltseting = new XsltSettings();
                    //myxsltseting.EnableDocumentFunction = true;
                    transform.Load(XsltFileDir);
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                MemoryStream stream = new MemoryStream();
    
                MemoryStream fs = new MemoryStream();
                XmlReaderSettings redset = new XmlReaderSettings();
                redset.ProhibitDtd = true;
                XsltArgumentList myarg = new XsltArgumentList();
                myarg.AddExtensionObject("myfn:utils", new MyXslExtension());
    
                System.Xml.Serialization.XmlSerializer xmlser = new System.Xml.Serialization.XmlSerializer(viewContext.ViewData.Model.GetType());
    
               
    
                xmlser.Serialize(fs, viewContext.ViewData.Model);
                fs.Position = 0;
                StreamReader reader2 = new StreamReader(fs, System.Text.Encoding.UTF8);
    
                if (string.IsNullOrEmpty(System.Web.HttpContext.Current.Request.Params["debug"]))
                {
                    try
                    {
    
                        //原来采用ViewData存数据的时候
                        // transform.Transform(XmlReader.Create(new StringReader(viewContext.ViewData["xmlcontent"].ToString()), redset),myarg, stream);
                        ///
                        ///XmlReader.Create(fs);会报缺少根节点呢
                        
                        transform.Transform(XmlReader.Create(new StringReader(reader2.ReadToEnd()),redset), myarg, stream);
    
                    }
                    catch (Exception ex)
                    {
                        throw ex;
                    }
                    // transform.Transform(Server.MapPath("a.xml"), null, stream);
                    stream.Position = 0;
                    StreamReader reader = new StreamReader(stream, System.Text.Encoding.UTF8);
                    // 呈现出解析后的内容
                    writer.Write(reader.ReadToEnd());
                }
                else
                {
                   writer.Write(reader2.ReadToEnd());
                  
    
                }
            }

    如果直接采用XmlReader.Create(fs);会报错误 缺少根节点 这是什么原因,应该怎么做请高手路过时看看

  • 相关阅读:
    Javascript学习笔记3 Javascript与BOM简介
    Javascript学习笔记2.3 Javascript与DOM实现动态表格效果
    Javascript学习笔记2.2 Javascript与DOM选项卡(滑动门)案例详解
    javascript是做什么的
    Javascript学习笔记2.1 Javascript与DOM简介
    Javascript学习笔记1 javascript的特点
    CSS3新增的选择器和属性
    DNSlog实现Mysql注入
    [转]Firefox+Burpsuite抓包配置(可抓取https)
    爬虫初窥day3:BeautifulSoup
  • 原文地址:https://www.cnblogs.com/qqloving/p/2029874.html
Copyright © 2011-2022 走看看