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);会报错误 缺少根节点 这是什么原因,应该怎么做请高手路过时看看

  • 相关阅读:
    我最讨厌画图,这辈子我都不想再画图
    bzoj1218[HNOI2003]激光炸弹
    bzoj1196[HNOI2006]公路修建问题
    bzoj1588[HNOI2002]营业额统计
    bzoj2039[2009国家集训队]employ人员雇佣
    bzoj3874[Ahoi2014]宅男计划
    bzoj2282[Sdoi2011]消防
    bzoj1798[Ahoi2009]Seq 维护序列seq
    bzoj4003[JLOI2015]城池攻占
    bzoj2809[Apio2012]dispatching
  • 原文地址:https://www.cnblogs.com/qqloving/p/2029874.html
Copyright © 2011-2022 走看看