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

浙公网安备 33010602011771号