- 热门文章:
- · 用asp.net 实现“九连环” 小游戏
- · ASP.Net中使用VB.Net调用存储过程并得到返回值
- · ASP.NET 的亲密朋友之--javascript
- · 如何开发一个可复用的软件系统
- · 在ASP.NET中显示进度条
- · 路由模拟——类设计的声明部分
- · 如何重新设置DataSet中的DataTable对象
- · 用NUnit2.1简单实现.net的测试驱动开发(TDD)
- · ASP.NET中的STREAMREADER对象总结
- · ASP.NET中的STREAMREADER对象总结
- · ASP.NET中的FILESTREAM对象总结
- · ASP.NET中的FILE对象总结
上一篇:改变文本框、按钮样式函数 >>
使用Asp.Net中的XmlValidatingReader来验证XML Schema.
后来,只有放下书,到书店看看,有没有其他什么书能带来帮助.当检到Professiona ASP.NET XML with C# 这本书时,里面讲到了使用System.Xml 和 System.Xml.Schema命名空间下的XmlTextReader类和XmlValidatingReader类来验证带有Schema或DTD的XML文档.便买下来了.
回寝室后,根据书里面面的介绍,写了一个小的测试程序,发现还很管用,在这里,但贴出来,希望给需要的人有帮助.
代码如下:
<%@Page Debug="true"%>
<%@Import Namespace="System"%>
<%@Import Namespace="System.Xml"%>
<%@Import Namespace="System.Xml.Schema"%>
<script language="C#" runat="server">
protected void uploadBtn_Click(Object sender,EventArgs e)
{
XmlTextReader myXml = null;
XmlValidatingReader myXmlDoc = null;
int nElements = 0; //统计文档中element的个数
int nAttributes = 0; //统计文档中Attributes的个数
int nComments = 0; //统计文档中 Comment的个数
int nPIs = 0; //统计文档中ProcessingInstruction的个数
int nCDATAs = 0; //统计文档中CDATA的个数
string sWorkingText = "";
resultArea.Text = "";
try
{
//装载XML Document
myXml = new XmlTextReader(fileSelector.PostedFile.InputStream);
myXml.WhitespaceHandling = WhitespaceHandling.None;
//XmlValidatingReader是XmlTextReader的帮助功能
//需要从XmlTextReader对象获取实例
myXmlDoc = new XmlValidatingReader(myXml);
myXmlDoc.ValidationType = ValidationType.Auto;
//验证事件委托的签名
myXmlDoc.ValidationEventHandler += new ValidationEventHandler(this.ValidationEventCallBack);
//在遍历XML文档的时候,XmlValidatingReadert将根据Schema或DTD
//对XML进行验证。
while(myXmlDoc.Read())
{
//这里面的语句的作用主要是分析XML文档各NODE,
//但while循环还是必要,因为只有逐个遍历所有个的NODE,才会检查出验证是否匹配。
switch(myXmlDoc.NodeType) //Judge Crrent Node@#s type. 判定当前结点的类型
{
case XmlNodeType.Element : // Element 元素
++nElements;
nAttributes += myXmlDoc.AttributeCount;
break;
case XmlNodeType.Text : //文本内容
sWorkingText ="<b>text:</b>" + myXmlDoc.Value + "<br/>";
resultArea.Text += sWorkingText;
break;
case XmlNodeType.Comment: //注释
++nCommen;
break;
case XmlNodeType.ProcessingInstruction: //处理指令
++nPIs;
break;
case XmlNodeType.CDATA: //CDATA
++nCDATAs;
break;
}
}
sWorkingText = "<br/>" + "Total number of elements:" + nElements + "<br/>";
sWorkingText += "Total number of attributes in document:" + nAttributes + "<br/>";
sWorkingText += "Total comments:" + nComments + "<br/>";
sWorkingText += "Total processingInstructions:" + nPIs + "<br/>";
sWorkingText += "Total CDATA sections:" + nCDATAs;
resultArea.Text += sWorkingText;
}
catch(XmlException exec)
{
sWorkingText = "Exception while parsing:" + "<br/>";
sWorkingText += "Line number:" + exec.LineNumber + "<br/>";
sWorkingText += "Message:" + exec.Message + "<br/>" + "<br/>";
sWorkingText += "Line position:" + exec.LinePosition + "<br/>";
sWorkingText += "Stack Trace:" + "<br/>" + exec.StackTrace;
resultArea.Text = sWorkingText;
}
finally
{
if (myXmlDoc!=null)
{
myXmlDoc.Close();
}
}
}
//验证事件
public void ValidationEventCallBack(Object sender,ValidationEventArgs e)
{
if (e.Severity == XmlSeverityType.Warning)//区分是警告还是错误
{
resultArea.Text += "<b>Validation warning: </b>" + e.Message + "<br/>";
}
else
{
resultArea.Text += "<b>Validation errors: </b>" + e.Message + "<br/>";
}
}
</script>
<html>
<head><title>XmlTextReader</title></head>
<body>
<form method="post" runat="server">
<asp:Label Font-Size="10pt" runat="server">上传XML文档 在服务器验证</asp:Label><br/>
<input type="file" size="40" runat="server" id="fileSelector"> <br/>
<asp:Button id="uploadBtn" Text="提交" onClick="uploadBtn_Click" runat="server"/><br/>
<asp:Label Font-Size="12pt" id="resultArea" runat="server"/><br/>
</form>
</body>
</html>
下一篇:用asp.net 实现“九连环” 小游戏 >>
相关文章:
- · asp.net中常用的一些小技巧
- · DataGrid删除确认及Item颜色交替
- · asp.net生成缩略图
- · 设计模式之单件模式(Singleton Pattern )
- · 设计模式之简单工厂模式(Simple Factory Pattern)
- · 如何在asp.net页面上放置的控件上实现左右键菜单,同时对之操作(2)
- · 设计模式之观察者模式(Observer Pattern)(二)
- · 设计模式之观察者模式(Observer Pattern)(一)
- · 1. 一个类似于Calendar日期控件,不用再刷新页面。
- · 一个完美的日期控件 + 一个用脚本断判日期型的方法(1)
- · 使用DataGrid动态绑定DropDownList
- · .NET 1.1中预编译ASP.NET页面实现原理浅析 [1] 自动预编译机制浅析
- · 利用ASP.NET服务器端自定义控件实现XML文件中还原表单
- · .NET概观
- · ASP.NET中的Http Handles
- · Asp.net性能优化总结(二)
- · 一个非常实用的Base64类
- · 在asp.net中为Web用户控件添加属性和事件
- · 使用.NET实现断点续传(HTTP)
- · .NET 脚本(二)
- · .NET 脚本
- · ASP.NET分页组件更新版本
- · 一种快速存取选择条目的方案(Asp.Net+C#)
- · Asp.Net(C#)+Sql Server三层架构下数据存取方案(五)
- · Asp.Net(C#)+Sql Server三层架构下数据存取方案(四)
- · Asp.Net(C#)+Sql Server三层架构下数据存取方案(三)
- · Asp.Net(C#)+Sql Server三层架构下数据存取方案(二)
- · Asp.Net(C#)+Sql Server三层架构下数据存取方案(一)
- · 在asp.net中使用excel模板
- · 关于ASPNET在IIS一些问题的经验总结
- · 认识Whidbey
- · 小程序构成大项目之——分页显示
- · ASP.NET 数据库缓存依赖
- · Global.asax 和 HttpApplication 类
- · 办公自动化系统公文归档代码
- · Asp.net性能优化总结(一)
- · 如何在DataGrid里面产生滚动条而不滚动题头
- · Whidbey中客户端回调机制(三)
