📄 100165643.htm
字号:
<td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 272.85pt; BORDER-TOP-STYLE: none; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none" valign="top" width="364">
<p class="a4" style="MARGIN-LEFT: 10.7pt"><span style="FONT-FAMILY: 宋体">表示声明节点</span><span lang="EN-US"> (<?xml version='1.0'…>)</span></p>
</td>
</tr>
<tr>
<td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 165.85pt; BORDER-TOP-STYLE: none; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT-STYLE: none" valign="top" width="221">
<p class="a4" style="MARGIN-LEFT: 10.7pt"><span lang="EN-US">XmlDocumentType</span></p>
</td>
<td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 272.85pt; BORDER-TOP-STYLE: none; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none" valign="top" width="364">
<p class="a4" style="MARGIN-LEFT: 10.7pt"><span style="FONT-FAMILY: 宋体">与文档类型声明相关的数据</span></p>
</td>
</tr>
<tr>
<td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 165.85pt; BORDER-TOP-STYLE: none; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT-STYLE: none" valign="top" width="221">
<p class="a4" style="MARGIN-LEFT: 10.7pt"><span lang="EN-US">XmlElement</span></p>
</td>
<td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 272.85pt; BORDER-TOP-STYLE: none; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none" valign="top" width="364">
<p class="a4" style="MARGIN-LEFT: 10.7pt"><span style="FONT-FAMILY: 宋体">一个</span><span lang="EN-US">XML</span><span style="FONT-FAMILY: 宋体">元素对象</span></p>
</td>
</tr>
<tr>
<td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 165.85pt; BORDER-TOP-STYLE: none; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT-STYLE: none" valign="top" width="221">
<p class="a4" style="MARGIN-LEFT: 10.7pt"><span lang="EN-US">XmlEntityReferenceNode</span></p>
</td>
<td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 272.85pt; BORDER-TOP-STYLE: none; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none" valign="top" width="364">
<p class="a4" style="MARGIN-LEFT: 10.7pt"><span style="FONT-FAMILY: 宋体">表示一个实体引用节点</span><span lang="EN-US"> </span></p>
</td>
</tr>
<tr>
<td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 165.85pt; BORDER-TOP-STYLE: none; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT-STYLE: none" valign="top" width="221">
<p class="a4" style="MARGIN-LEFT: 10.7pt"><span lang="EN-US">XmlProcessingInstruction</span></p>
</td>
<td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 272.85pt; BORDER-TOP-STYLE: none; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none" valign="top" width="364">
<p class="a4" style="MARGIN-LEFT: 10.7pt"><span style="FONT-FAMILY: 宋体">包含</span><span lang="EN-US">XML</span><span style="FONT-FAMILY: 宋体">处理指令</span></p>
</td>
</tr>
</tbody>
</table>
<p class="MsoNormal"><span lang="EN-US"> </span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">可以看出,</span><span lang="EN-US">.NET</span><span style="FONT-FAMILY: 宋体">使其类适合于任何</span><span lang="EN-US">XML</span><span style="FONT-FAMILY: 宋体">类型。因此,该工具集是非常灵活和强大的。我们不打算详细介绍每个类,而是用几个示例来说明可以完成什么任务。其层次结构如图</span><span lang="EN-US">23-5 </span><span style="FONT-FAMILY: 宋体">所示。</span></p>
<p align="center"><span lang="EN-US"><img height="624" src="23/image005.jpg" width="351" border="0" alt="" /></span></p>
<p style="FTEL: 8.15pt" align="center"><span style="FONT-FAMILY: 宋体">图</span><span lang="EN-US"> 23-5</span></p>
<h3 style="MARGIN-TOP: 8.15pt; MARGIN-LEFT: 0cm; MARGIN-RIGHT: 0cm; FTEL: 8.15pt"><span style="FONT-FAMILY: 黑体">使用</span><span lang="EN-US">XmlDocument</span><span style="FONT-FAMILY: 黑体">对象</span></h3>
<p class="MsoNormal"><span lang="EN-US">XmlDocument</span><span style="FONT-FAMILY: 宋体">及其派生类</span><span lang="EN-US">XmlDataDocument(</span><span style="FONT-FAMILY: 宋体">详见本章后面的内容</span><span lang="EN-US">)</span><span style="FONT-FAMILY: 宋体">是用于在</span><span lang="EN-US">.NET</span><span style="FONT-FAMILY: 宋体">中表示</span><span lang="EN-US">DOM</span><span style="FONT-FAMILY: 宋体">的类。与</span><span lang="EN-US">XmlReader </span><span style="FONT-FAMILY: 宋体">和</span><span lang="EN-US"> XmlWriter</span><span style="FONT-FAMILY: 宋体">不同,</span><span lang="EN-US">XmlDocument</span><span style="FONT-FAMILY: 宋体">具有读写功能,并可以随机访问</span><span lang="EN-US">DOM</span><span style="FONT-FAMILY: 宋体">树。</span><span lang="EN-US">XmlDocument</span><span style="FONT-FAMILY: 宋体">类似于</span><span lang="EN-US">MSXML</span><span style="FONT-FAMILY: 宋体">中的</span><span lang="EN-US">DOM</span><span style="FONT-FAMILY: 宋体">执行方式。如果您用</span><span lang="EN-US">MSXML</span><span style="FONT-FAMILY: 宋体">编过程序,就会觉得使用</span><span lang="EN-US">XmlDocument</span><span style="FONT-FAMILY: 宋体">很合适。</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">下面介绍的示例创建一个</span><span lang="EN-US">XmlDocument</span><span style="FONT-FAMILY: 宋体">对象,加载磁盘上的一个文档,再从标题元素中加载带有数据的列表框,这类似于</span><span lang="EN-US">XmlReader</span><span style="FONT-FAMILY: 宋体">一节的示例,区别是本例选择要使用的节点,而不是像</span><span lang="EN-US">XmlReader</span><span style="FONT-FAMILY: 宋体">示例那样浏览整个文档。</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">下面是该示例的代码,与</span><span lang="EN-US">XmlReader</span><span style="FONT-FAMILY: 宋体">示例相比,这个示例是比较简单的</span><span lang="EN-US">(</span><span style="FONT-FAMILY: 宋体">该文件在下载的</span><span lang="EN-US">DOMSample1</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"><a ftel="XMLDocument"><span lang="EN-US">private void button1</span></a><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-TOP: 8.15pt; MARGIN-LEFT: 21.45pt; MARGIN-RIGHT: 0cm; FTEL: 18.45pt"><span lang="EN-US"> // doc is declared at the module level</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> // change path to match your path structure</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> doc.Load("..\\..\\..\\books.xml");</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> // get only the nodes that we want</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> XmlNodeList nodeLst=doc.GetElementsByTagName("title");</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> // iterate through the XmlNodeList</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> foreach(XmlNode node in nodeLst) listBox1.Items.Add(node.InnerText);</span></p>
<p class="a6" 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></p>
<p class="2" style="MARGIN-TOP: 8.15pt; MARGIN-LEFT: 21.45pt; MARGIN-RIGHT: 0cm; FTEL: 18.45pt"><span lang="EN-US">private XmlDocument doc=new XmlDocument();</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">如果这就是我们需要完成的工作,使用</span><span lang="EN-US">XmlReader</span><span style="FONT-FAMILY: 宋体">加载列表框就是一种非常高效的方式,原因是我们只浏览一次文档,就完成了处理。这就是</span><span lang="EN-US">XmlReader</span><span style="FONT-FAMILY: 宋体">的工作方式。但如果要重新查看某个节点,最好使用</span><span lang="EN-US">XmlDocument</span><span style="FONT-FAMILY: 宋体">。扩展该示例,添加另一个事件处理程序</span><span lang="EN-US">(</span><span style="FONT-FAMILY: 宋体">即</span><span lang="EN-US">DOMSample2)</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">private void listBox1</span><span lang="EN-US" style="FONT-FAMILY: 'Baskerville BE Regular'">_</span><span lang="EN-US">SelectedIndexChanged(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"> //create XPath search string</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> string srch="bookstore/book[title='" + listBox1.SelectedItem.ToString() </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"> //look for the extra data</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> XmlNode foundNode = doc.SelectSingleNode(srch);</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> if(foundNode != null)</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> MessageBox.Show(foundNode.InnerText);</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> else</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> MessageBox.Show("Not found");</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">books.xml </span><span style="FONT-FAMILY: 宋体">文档中加载了带有标题的列表框。单击列表框,会引发</span><span lang="EN-US">SelectedIndexChanged()</span><span style="FONT-FAMILY: 宋体">事件,获取列表框中所选项的文本</span><span lang="EN-US">(</span><span style="FONT-FAMILY: 宋体">书名</span><span lang="EN-US">)</span><span style="FONT-FAMILY: 宋体">,创建一个</span><span lang="EN-US">XPath </span><span style="FONT-FAMILY: 宋体">语句,把它传送给</span><span lang="EN-US">doc</span><span style="FONT-FAMILY: 宋体">对象的</span><span lang="EN-US">SelectSingleNode() </span><span style="FONT-FAMILY: 宋体">方法,该方法返回</span><span lang="EN-US">title</span><span style="FONT-FAMILY: 宋体">是书名的一部分的</span><span lang="EN-US">book</span><span style="FONT-FAMILY: 宋体">元素</span><span lang="EN-US">(foundNode)</span><span style="FONT-FAMILY: 宋体">。在消息框中显示节点的</span><span lang="EN-US">InnerText</span><span style="FONT-FAMILY: 宋体">。继续单击列表框中的项目,此时文档已经加载,且一直到释放它之前,它都处于已加载状态。</span></p>
<p class="MsoNormal"><span lang="EN-US"> </span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">下面简要介绍一下</span><span lang="EN-US">SelectSingleNode()</span><span style="FONT-FAMILY: 宋体">方法,它是</span><span lang="EN-US">XmlDocument</span><span style="FONT-FAMILY: 宋体">类的</span><span lang="EN-US">Xpath</span><span style="FONT-FAMILY: 宋体">实现,</span><span lang="EN-US">SelectSingleNode ()</span><span style="FONT-FAMILY: 宋体">和</span> <span lang="EN-US">SelectNodes()</span><span style="FONT-FAMILY: 宋体">都是在</span><span lang="EN-US">XmlNode</span><span style="FONT-FAMILY: 宋体">中定义的,而</span><span lang="EN-US">XmlDocument</span><span style="FONT-FAMILY: 宋体">是基于</span><span lang="EN-US">XmlNode</span><span style="FONT-FAMILY: 宋体">的。</span><span lang="EN-US">SelectSingleNode()</span><span style="FONT-FAMILY: 宋体">返回一个</span><span lang="EN-US">XmlNode</span><span style="FONT-FAMILY: 宋体">,</span><span lang="EN-US">SelectNodes()</span><span style="FONT-FAMILY: 宋体">返回一个</span><span lang="EN-US">XmlNodeList</span><span style="FONT-FAMILY: 宋体">。</span><span lang="EN-US">System.Xml.XPath</span><span style="FONT-FAMILY: 宋体">命名空间包含许多</span><span lang="EN-US">Xpath</span><span style="FONT-FAMILY: 宋体">实现。后面的一节会介绍它们。</span></p>
<h4 style="FTEL: 21.45pt"><span lang="EN-US">1. </span><span style="FONT-FAMILY: 黑体">插入节点</span></h4>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">前面的示例使用</span><span lang="EN-US">XmlTextWriter</span><span style="FONT-FAMILY: 宋体">创建一个新文档。其局限性是不能把节点插入到当前文档中。而使用</span><span lang="EN-US">XmlDocument</span><span style="FONT-FAMILY: 宋体">类可以做到这一点。把上一个示例中的</span><span lang="EN-US">button1</span><span lang="EN-US" style="FONT-FAMILY: 'Baskerville BE Regular'">_</span><span lang="EN-US">Click()</span><span style="FONT-FAMILY: 宋体">事件处理程序作如下改动</span><span lang="EN-US">(</span><span style="FONT-FAMILY: 宋体">在下载代码的</span><span lang="EN-US">DOMSample3</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">private 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"> //change path to match your structure</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> doc.Load("..\\..\\..\\books.xml");</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> //create a new 'book' element</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> XmlElement newBook=doc.CreateElement("book");</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> //set some attributes</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> newBook.SetAttribute("genre","Mystery");</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> newBook.SetAttribute("publicationdate","2001");</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> newBook.SetAttribute("ISBN","123456789");</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> //create a new 'title' element</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> XmlElement newTitle=doc.CreateElement("title");</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> newTitle.InnerText="The Case of the Missing Cookie";</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> newBook.AppendChild(newTitle);</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> //create new author element</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> XmlElement newAuthor=doc.CreateElement("author");</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> newBook.AppendChild(newAuthor);</span></p>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -