站内搜索
分类列表
本类阅读排行
本类推荐文章
广告
使用Asp.Net中的XmlValidatingReader来验证XML Schema.
作者: 来源: 点击: 日期:2007-7-6 0:54:34
这段时间,我正在学习XML,书上介绍使用Xerces-C或Xerces-J来验证XML文档的Schema或DTD,结果,发现上面的工具不好用.
后来,只有放下书,到书店看看,有没有其他什么书能带来帮助.当检到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;
}
}
后来,只有放下书,到书店看看,有没有其他什么书能带来帮助.当检到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;
}
}
使用Asp.Net中的XmlValidatingReader来验证XML Schema. 评论
