使用Asp.Net中的XmlValidatingReader來驗證XML Schema.

來源:互聯網
上載者:User

標籤:style   c   tar   ext   color   int   

使用Asp.Net中的XmlValidatingReader來驗證XML Schema.

這段時間,我正在學習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(); 


}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.