⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 100165640.htm

📁 C#高级编程(第三版),顶死你们。。 。up
💻 HTM
📖 第 1 页 / 共 2 页
字号:
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else </span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //otherwise move on</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tr.Read();</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 32.25pt"><span lang="EN-US">}</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">while</span><span style="FONT-FAMILY: 宋体">循环中,使用</span><span lang="EN-US">MoveToContent</span><span style="FONT-FAMILY: 宋体">查找类型为</span><span lang="EN-US">XmlNodeType.Element</span><span style="FONT-FAMILY: 宋体">和名称为</span><span lang="EN-US">title</span><span style="FONT-FAMILY: 宋体">的节点。我们使用</span><span lang="EN-US">XmlTextReader</span><span style="FONT-FAMILY: 宋体">的</span><span lang="EN-US">EOF</span><span style="FONT-FAMILY: 宋体">属性作为循环条件。如果节点的类型不是</span><span lang="EN-US">Element</span><span style="FONT-FAMILY: 宋体">,或者名称不是</span><span lang="EN-US">title</span><span style="FONT-FAMILY: 宋体">,</span><span lang="EN-US">else</span><span style="FONT-FAMILY: 宋体">子句就会调用</span><span lang="EN-US">Read()</span><span style="FONT-FAMILY: 宋体">方法进入下一个节点。查找到一个满足条件的节点后,就把</span><span lang="EN-US">ReadElementString()</span><span style="FONT-FAMILY: 宋体">的结果添加到列表框中。这样就在</span><span lang="EN-US">listbox</span><span style="FONT-FAMILY: 宋体">中添加一个书名。注意,在成功执行了</span><span lang="EN-US">ReadElementString()</span><span style="FONT-FAMILY: 宋体">后,不需要调用</span><span lang="EN-US">Read()</span><span style="FONT-FAMILY: 宋体">方法,这是因为</span><span lang="EN-US">ReadElementString()</span><span style="FONT-FAMILY: 宋体">已经查看了整个</span><span lang="EN-US">Element</span><span style="FONT-FAMILY: 宋体">,然后定位到下一个节点上。</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">如果删除了</span><span lang="EN-US">if</span><span style="FONT-FAMILY: 宋体">子句中的</span><span lang="EN-US">&amp;&amp; tr.FTEL==&quot;title&quot;</span><span style="FONT-FAMILY: 宋体">,在抛出</span><span lang="EN-US">XmlException</span><span style="FONT-FAMILY: 宋体">异常时,就必须捕获它。如果查看一下数据文件,就会发现</span><span lang="EN-US">MoveToContent()</span><span style="FONT-FAMILY: 宋体">查找到的第一个元素是</span><span lang="EN-US">&lt;bookstore&gt;</span><span style="FONT-FAMILY: 宋体">,因为它是一个元素,所以把检查过程放在</span><span lang="EN-US">if</span><span style="FONT-FAMILY: 宋体">语句中。但是,它不包含简单的文本类型,因此会让</span><span lang="EN-US">ReadElementString()</span><span style="FONT-FAMILY: 宋体">引发一个</span><span lang="EN-US">XmlException</span><span style="FONT-FAMILY: 宋体">异常。解决这个问题的一种方式是把</span><span lang="EN-US">ReadElementString()</span><span style="FONT-FAMILY: 宋体">调用放在它自己的函数中。现在,如果在这个函数中</span><span lang="EN-US">ReadElementString()</span><span style="FONT-FAMILY: 宋体">调用失败,就可以处理错误,返回给调用函数。</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">下面就调用这个新方法</span><span lang="EN-US">LoadList()</span><span style="FONT-FAMILY: 宋体">,把</span><span lang="EN-US">XmltextReader</span><span style="FONT-FAMILY: 宋体">作为参数。进行了这些修改后,该示例如下所示</span><span lang="EN-US">(</span><span style="FONT-FAMILY: 宋体">这段代码在</span><span lang="EN-US">XmlReaderSample3</span><span style="FONT-FAMILY: 宋体">文件夹中</span><span lang="EN-US">)</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">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="a6" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">{</span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp; //use a filestream to get the data</span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp; FileStream fs = new FileStream(&quot;..\\..\\..\\books.xml&quot;, FileMode.Open);</span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp; XmlTextReader tr = new XmlTextReader(fs);</span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp; while(!tr.EOF)</span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp; {</span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //if we hit an element type, try and load it in the listbox</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(tr.MoveToContent() == XmlNodeType.Element)</span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LoadList(tr);</span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else </span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //otherwise move on</span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tr.Read();</span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp; }</span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">}&nbsp; </span></p>
<p class="2" style="MARGIN-TOP: 8.15pt; MARGIN-LEFT: 21.45pt; MARGIN-RIGHT: 0cm; FTEL: 18.45pt"><span lang="EN-US">private void LoadList(XmlReader reader) </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">&nbsp;&nbsp; try </span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp; {</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; listBox1.Items.Add(reader.ReadElementString());</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp; }</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp; // if an XmlException is raised, ignore it.</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp; catch(XmlException er){}</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">System.Xml</span><span style="FONT-FAMILY: 宋体">命名空间中类的灵活性。</span></p>
<h4 style="FTEL: 21.45pt"><span lang="EN-US">2. </span><span style="FONT-FAMILY: 黑体">检索属性数据</span></h4>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">在运行示例代码时,注意在读取节点时,没有看到属性。这是因为属性不是文档结构的一部分。针对元素节点,可以检查属性是否存在,并可检索属性值。</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">例如,如果有属性,</span><span lang="EN-US">HasAttributes</span><span style="FONT-FAMILY: 宋体">就返回</span><span lang="EN-US">true</span><span style="FONT-FAMILY: 宋体">,否则就返回</span><span lang="EN-US">false</span><span style="FONT-FAMILY: 宋体">。</span><span lang="EN-US">AttributeCount</span><span style="FONT-FAMILY: 宋体">属性确定属性的个数。</span><span lang="EN-US">GetAttribute</span><span style="FONT-FAMILY: 宋体">方法按照名称或索引来获取属性。如果要一次迭代一个属性,就可以使用</span><span lang="EN-US">MoveToFirstAttribute() </span><span style="FONT-FAMILY: 宋体">和</span><span lang="EN-US">MoveToNextAttribute()</span><span style="FONT-FAMILY: 宋体">方法。</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">下面的示例迭代</span><span lang="EN-US">XmlReaderSample4</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">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="a6" 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">&nbsp;&nbsp; //set this path to match your data path structure</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp; string fileName = &quot;..\\..\\..\\books.xml&quot;;</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp; //Create the new TextReader Object</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp; XmlTextReader tr = new XmlTextReader(fileName);</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp; //Read in node at a time&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp; while(tr.Read())</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp; {</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //check to see if it's a NodeType element</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(tr.NodeType == XmlNodeType.Element)&nbsp; </span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //if it's an element, then let's look at the attributes.</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(int i = 0; i &lt; tr.AttributeCount; i++) {</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; listBox1.Items.Add(tr.GetAttribute(i));</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 32.25pt"><span lang="EN-US">}</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">GetAttribute()</span><span style="FONT-FAMILY: 宋体">方法把属性值加载到列表框中。在本例中,这些属性是</span><span lang="EN-US">genre</span><span style="FONT-FAMILY: 宋体">、</span><span lang="EN-US">publicationdate</span><span style="FONT-FAMILY: 宋体; LETTER-SPACING: 0.2pt">和</span><span lang="EN-US">ISBN</span><span style="FONT-FAMILY: 宋体">。</span></p></div>
                <!-- page -->
                <div class="page" style="text-align: center">
                    <a href="100165639.htm">上一页</a>&nbsp;&nbsp;&nbsp;<a href="index.html">首页</a>&nbsp;&nbsp;&nbsp;<a href="100165641.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='100165640.htm'><font color='red'>23.5.1  使用 XmlTextReader类</font></a></h1>
                        <div id="divRealteNod2" style="padding-left: 2px">
                        <div style='float:left;width:49%'>·<a href='100165637.htm'>23.3  在.NET中使用MSXML</a></div><div style='float:right;width:49%'>·<a href='100165638.htm'>23.4  使用System.Xml类</a></div><div style='float:left;width:49%'>·<a href='100165639.htm'>23.5  读写流格式的XML</a></div><div style='float:right;width:49%'>·<a href='100165641.htm'>23.5.2  使用XmlValidatingReader类</a></div><div style='float:left;width:49%'>·<a href='100165642.htm'>23.5.3  使用XmlTextWriter类</a></div><div style='float:right;width:49%'>·<a href='100165643.htm'>23.6  在.NET中使用DOM</a></div></div>
                    </div>
                </div>
                </div>
            <!-- 评论 -->
            <!-- 今日推荐 -->
            </div>
        <!-- 页脚 -->
        <div id="foot">
         <img src="../../book/readbook.aspx@node=5640&bookid=16&bookname=23.5.1++_25ca_25b9_25d3_25c3+XmlTextReader_25c0_25e0" alt="" width="0" height="0" />
        <style>

        </div>
</body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -