分享
 
 
 

使用Asp.Net中的XmlValidatingReader来验证XML Schema.

王朝asp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

这段时间,我正在学习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;

}

}

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">&nbsp;<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>

如果对实现功能有兴趣,可以翻阅相关的书或.Net Framework文档来熟悉XmlTextReader和XmlValidatingReader.

代码编写有不成熟的地方请多指教!谢谢!

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有