100165641.htm
来自「C#高级编程(第三版),顶死你们。。 。up」· HTM 代码 · 共 215 行 · 第 1/2 页
HTM
215 行
<p class="MsoNormal"><span lang="EN-US"> </span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">设置好属性后,就需要指定</span><span lang="EN-US">ValidationEventHandler</span><span style="FONT-FAMILY: 宋体">。在发生有效性验证错误时,就要引发一个事件,然后以合适的方式对该错误进行响应。</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">下面的示例说明了响应错误的方式。首先在</span><span lang="EN-US">books.xml</span><span style="FONT-FAMILY: 宋体">文件中添加一个</span><span lang="EN-US">XDR (XML Data Reduced)</span><span style="FONT-FAMILY: 宋体">模式命名空间,并把该文件重新命名为</span><span lang="EN-US">booksVal.xml</span><span style="FONT-FAMILY: 宋体">,现在该文件应如下所示:</span></p>
<p class="a6" style="MARGIN-TOP: 8.15pt; MARGIN-LEFT: 21.45pt; MARGIN-RIGHT: 0cm; FTEL: 18.45pt"><span lang="EN-US"><?xml version='1.0'?></span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"><!-- This file represents a fragment of a book store inventory database --></span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"><bookstore xmlns="x-schema:books.xdr"></span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> <book genre="autobiography" publicationdate="1981" ISBN="1-861003-11-0"></span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> <title>The Autobiography of Benjamin Franklin</title></span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> <author></span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> <first-name>Benjamin</first-name></span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> <list-name>Franklin</last-name></span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> </author></span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> <price>8.99</price></span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> </book></span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> ...</span></p>
<p class="a6" style="MARGIN-TOP: 0cm; MARGIN-LEFT: 21.45pt; MARGIN-RIGHT: 0cm; FTEL: 18.45pt"><span lang="EN-US"></bookstore></span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">注意,</span><span lang="EN-US">bookstore</span><span style="FONT-FAMILY: 宋体">元素现在拥有属性</span><span lang="EN-US">xmlns="x-schema:books.xdr"</span><span style="FONT-FAMILY: 宋体">,指向</span><span lang="EN-US">XDR</span><span style="FONT-FAMILY: 宋体">模式</span><span lang="EN-US">books.xdr</span><span style="FONT-FAMILY: 宋体">:</span></p>
<p class="2" style="MARGIN-TOP: 8.15pt; MARGIN-LEFT: 21.45pt; MARGIN-RIGHT: 0cm; FTEL: 18.45pt"><span lang="EN-US"><?xml version="1.0"?></span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"><Schema xmlns="urn:schemas-microsoft-com:xml-data"</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> xmlns:dt="urn:schemas-microsoft-com:datatypes"></span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> <ElementType FTEL="first-name" content="textOnly"/></span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> <ElementType FTEL="last-name" content="textOnly"/></span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> <ElementType FTEL="name" content="textOnly"/></span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> <ElementType FTEL="price" content="textOnly" dt:type="fixed.14.4"/></span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> <ElementType FTEL="author" content="eltOnly" order="one"></span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> <group order="seq"></span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> <element type="name"/></span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> </group></span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> <group order="seq"></span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> <element type="first-name"/></span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> <element type="last-name"/></span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> </group></span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> </ElementType></span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> <ElementType FTEL="title" content="textOnly"/></span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> <AttributeType FTEL="genre" dt:type="string"/></span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> <ElementType FTEL="book" content="eltOnly"></span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> <attribute type="genre" required="yes"/></span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> <element type="title"/></span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> <element type="author"/></span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> <element type="price"/></span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> </ElementType></span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> <ElementType FTEL="bookstore" content="eltOnly"></span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> <element type="book"/></span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> </ElementType></span></p>
<p class="2" style="MARGIN-TOP: 0cm; MARGIN-LEFT: 21.45pt; MARGIN-RIGHT: 0cm; FTEL: 18.45pt"><span lang="EN-US"></Schema></span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">现在一切都很顺利,但</span><span lang="EN-US">XML</span><span style="FONT-FAMILY: 宋体">文件上还有两个没有在模式上定义的属性</span><span lang="EN-US">(book</span><span style="FONT-FAMILY: 宋体">元素的属性</span><span lang="EN-US">publicationdate</span><span style="FONT-FAMILY: 宋体">和</span><span lang="EN-US">ISBN)</span><span style="FONT-FAMILY: 宋体">。把这些属性添加进去,通过引发一个有效性验证错误,说明确实进行了有效性验证,可以使用下面的代码</span><span lang="EN-US">(</span><span style="FONT-FAMILY: 宋体">在</span><span lang="EN-US">XMLReaderSample5</span><span style="FONT-FAMILY: 宋体">中</span><span lang="EN-US">)</span><span style="FONT-FAMILY: 宋体">进行验证。</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">首先还需要在类中添加:</span></p>
<p class="2" style="MARGIN-TOP: 8.15pt; MARGIN-LEFT: 21.45pt; MARGIN-RIGHT: 0cm; FTEL: 18.45pt"><span lang="EN-US">using System.Xml.Schema;</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">接着在按钮的事件处理程序中添加如下代码:</span></p>
<p class="2" style="MARGIN-TOP: 8.15pt; MARGIN-LEFT: 21.45pt; MARGIN-RIGHT: 0cm; FTEL: 18.45pt"><span lang="EN-US">protected void button1</span><span lang="EN-US" style="FONT-FAMILY: 'Baskerville BE Regular'">_</span><span lang="EN-US">Click (object sender, System.EventArgs e)</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">{</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> //change this to match your path structure.</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> string fileName = "..\\..\\..\\booksVal.xml";</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> XmlTextReader tr=new XmlTextReader(fileName);</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> XmlValidatingReader trv = new XmlValidatingReader(tr);</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> </span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> //Set validation type</span></p>
<p class="2" style="MARGIN-TOP: 0cm; MARGIN-LEFT: 21.45pt; MARGIN-RIGHT: 0cm; FTEL: 18.45pt"><span lang="EN-US"> trv.ValidationType=ValidationType.XDR;</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> //Add in the Validation eventhandler</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> trv.ValidationEventHandler += </span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> new ValidationEventHandler(this.ValidationEvent);</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> </span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> //Read in node at a time </span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> while(trv.Read()) </span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> {</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> if(trv.NodeType == XmlNodeType.Text)</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> listBox1.Items.Add(trv.Value);</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> }</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">}</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">public void ValidationEvent (object sender, ValidationEventArgs args)</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">{</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> MessageBox.Show(args.Message);</span></p>
<p class="2" style="MARGIN-TOP: 0cm; MARGIN-LEFT: 21.45pt; MARGIN-RIGHT: 0cm; FTEL: 18.45pt"><span lang="EN-US">}</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">创建</span><span lang="EN-US">XmlTextReader</span><span style="FONT-FAMILY: 宋体">,并把它传送给</span><span lang="EN-US">XmlValidatingReader</span><span style="FONT-FAMILY: 宋体">。创建好</span><span lang="EN-US">XmlValidatingReader(trv)</span><span style="FONT-FAMILY: 宋体">后,就可以用前面示例中使用</span><span lang="EN-US">XmlTextReader</span><span style="FONT-FAMILY: 宋体">的方式使用它。区别是指定</span><span lang="EN-US">ValidationType</span><span style="FONT-FAMILY: 宋体">,并添加一个</span><span lang="EN-US">ValidationEventHandler</span><span style="FONT-FAMILY: 宋体">。可以用合适的方式处理有效性验证错误。在本例中,用一个消息框显示错误,在引发</span><span lang="EN-US">ValidationEvent</span><span style="FONT-FAMILY: 宋体">时,消息框如图</span><span lang="EN-US">23-4</span><span style="FONT-FAMILY: 宋体">所示。</span></p>
<p align="center"><span lang="EN-US"><img height="76" src="23/image004.jpg" width="342" border="0" alt="" /></span></p>
<p style="FTEL: 8.15pt" align="center"><span style="FONT-FAMILY: 宋体">图</span> <span lang="EN-US">23-4</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体; LETTER-SPACING: 0.1pt">与一些分析器不同,一旦出现有效性验证错误,</span><span lang="EN-US" style="LETTER-SPACING: 0.1pt"> XmlValidatingReader</span><span style="FONT-FAMILY: 宋体; LETTER-SPACING: 0.1pt">仍会继续读取数据。如果可以确定它是一个严重错误,就应停止读取数据,处理该错误。</span></p>
<h4 style="FTEL: 21.85pt"><span style="FONT-FAMILY: 黑体; LETTER-SPACING: 0.1pt">使用</span><span lang="EN-US">Schemas</span><span style="FONT-FAMILY: 黑体">属性</span></h4>
<p class="MsoNormal"><span lang="EN-US">XmlValidatingReader</span><span style="FONT-FAMILY: 宋体">的</span><span lang="EN-US">Schemas</span><span style="FONT-FAMILY: 宋体">属性包含一个</span><span lang="EN-US">XmlSchemaCollection</span><span style="FONT-FAMILY: 宋体">,它在命名空间</span><span lang="EN-US">System.Xml.Schema</span><span style="FONT-FAMILY: 宋体">中。这个集合包含预先加载的</span><span lang="EN-US">XSD</span><span style="FONT-FAMILY: 宋体">和</span><span lang="EN-US">XDR</span><span style="FONT-FAMILY: 宋体">模式,以进行非常快速的有效性验证,特别适合于验证几个文档的情况,因为在每次进行有效性验证时,不需要重新加载该模式。为了利用这个性能,要创建一个</span><span lang="EN-US">XmlSchemaCollection</span><span style="FONT-FAMILY: 宋体">对象。</span><span lang="EN-US">Add()</span><span style="FONT-FAMILY: 宋体">方法用于填充</span><span lang="EN-US">XmlSchemaCollection</span><span style="FONT-FAMILY: 宋体">对象,它有</span><span lang="EN-US">4</span><span style="FONT-FAMILY: 宋体">个重载方法,它们的参数分别是基于</span><span lang="EN-US">XmlSchema</span><span style="FONT-FAMILY: 宋体">的对象、基于</span><span lang="EN-US">XmlSchemaCollection</span><span style="FONT-FAMILY: 宋体">的对象、一个带有</span><span lang="EN-US">namespace</span><span style="FONT-FAMILY: 宋体">的字符串和包含模式文件的</span><span lang="EN-US">URI</span><span style="FONT-FAMILY: 宋体">的字符串,最后是一个带</span><span lang="EN-US">namespace</span><span style="FONT-FAMILY: 宋体">的字符串和一个包含模式的基于</span><span lang="EN-US">XmlReader</span><span style="FONT-FAMILY: 宋体">的对象。</span></p></div>
<!-- page -->
<div class="page" style="text-align: center">
<a href="100165640.htm">上一页</a> <a href="index.html">首页</a> <a href="100165642.htm">下一页</a>
</div>
<div style="margin: 0px auto; width: 700px; border: solid 1px #0b5f98;">
<div style="float: left; width: 16px; background-color: #0b5f98; color: White; padding: 1px;">
图书导读
</div>
<div style="float: right; width: 670px; text-align: left; line-height: 16pt; padding-left: 2px">
<!--导读-->
<h1 id="divCurrentNode2" style="color: #b83507; width: 100%; text-align: left; font-size: 12px; padding-left: 2px">当前章节:<a href='100165641.htm'><font color='red'>23.5.2 使用XmlValidatingReader类</font></a></h1>
<div id="divRealteNod2" style="padding-left: 2px">
<div style='float:left;width:49%'>·<a href='100165638.htm'>23.4 使用System.Xml类</a></div><div style='float:right;width:49%'>·<a href='100165639.htm'>23.5 读写流格式的XML</a></div><div style='float:left;width:49%'>·<a href='100165640.htm'>23.5.1 使用 XmlTextReader类</a></div><div style='float:right;width:49%'>·<a href='100165642.htm'>23.5.3 使用XmlTextWriter类</a></div><div style='float:left;width:49%'>·<a href='100165643.htm'>23.6 在.NET中使用DOM</a></div><div style='float:right;width:49%'>·<a href='100165644.htm'>23.7 在NET中使用XPath和XSLT</a></div></div>
</div>
</div>
</div>
<!-- 评论 -->
<!-- 今日推荐 -->
</div>
<!-- 页脚 -->
<div id="foot">
<img src="../../book/readbook.aspx@node=5641&bookid=16&bookname=23.5.2++_25ca_25b9_25d3_25c3XmlValidatingReader_25c0_25e0" alt="" width="0" height="0" />
<style>
</div>
</body>
</html>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?