创建 XML 文件
|
在 Windows 开始菜单上,指向运行,键入 notepad.exe,然后单击确定以打开记事本。 复制以下代码并将其粘贴到记事本中: <?xml version='1.0' encoding='utf-16'?>
<bk:Books xmlns:bk='http://myserver/myschemas/Books'>
<bk:Book>
<bk:Title>Just XML</bk:Title>
</bk:Book>
<bk:Book> <bk:Title>Professional XML</bk:Title>
</bk:Book>
<bk:Book>
<bk:Title>XML Step by Step</bk:Title>
</bk:Book>
<bk:Book>
<bk:Title>XML By Example</bk:Title>
</bk:Book>
</bk:Books>
|
|
复制以下代码并将其粘贴到记事本中: 在文件菜单上,单击保存。 |
|
复制以下代码并将其粘贴到记事本中: 在另存为对话框的保存类型文本框中,键入所有文件。 在文件名文本框中,键入 Books.xml,然后单击确定。 |
创建 Visual C# .NET 项目
下面的代码示例使用以下对象和类:
• |
XPathNavigator 类: XPathNavigator 基于 XML 路径语言 (XPath) 数据模型,该类提供对任何数据存储区实现 XPath 查询所需要的方法。 |
• |
XPathExpression 类: 该类封装已编译的 XPath 表达式,在调用 Compile 时会返回该类。 Select、Evaluate 和 Matches 方法使用该类。 |
• |
XmlNamespaceManager 类: XmlNamespaceManager 用于解析命名空间,向集合添加命名空间,以及从集合删除命名空间。 XmlNamespaceManager 还为这些命名空间提供范围管理。 因为 Books.xml 在代码中使用下面的“bk”命名空间,所以您必须使用 XmlNamespaceManager。 |
• |
XPathNodeIterator 类: 该对象提供对一组选定节点的迭代程序。 |
若要创建并运行 Visual Basic .NET 项目,请按下列步骤操作:
|
在 Visual C# .NET 中新建一个 Windows 应用程序项目。默认情况下会将 Form1 添加到项目中。 |
|
将一个 Button 控件和一个 TextBox 控件放到 Form1 上。 |
|
将 TextBox 控件的 MultiLine 属性设置为 True。 |
|
单击以展开 TextBox 控件,以便查看四到五行数据。 |
|
将下面的代码添加到“代码”窗口顶部: using System.Xml;
using System.Xml.XPath;
|
|
若要将 Books.xml file 文件加载到 XmlDocument 对象中,请将下面的代码添加到 Button 对象的 Click 事件中。 XmlDocument oxmldoc = new XmlDocument();
oxmldoc.Load(@"c:\Books.xml");
|
|
确保前面代码中的 Books.xml 路径指向计算机上的正确路径。 |
|
使用 XmlDocument 对象的 CreateNavigator 方法创建 XPathNavigator 对象,以便运行 XPath 查询: XPathNavigator oXPathNav;
oXPathNav = oxmldoc.CreateNavigator();
|
|
使用 XPathNavigator 的 Compile 方法创建 XPathExpression 类,然后传递 XPath 查询作为参数: XPathExpression Expr;
Expr = oXPathNav.Compile("//bk:Book[position()>=2]");
|
|
使用 AddNamespace 方法向 XmlNamespaceManager 对象添加“bk”命名空间: XmlNamespaceManager(oXPathNav.NameTable);
oxmlNSManager.AddNamespace("bk", "http://myserver/myschemas/Books");
|
|
使用 XPathExpression 的 SetContext 方法将 XPathExpression 上下文设置为 XmlNamespaceManager: Expr.SetContext(oxmlNSManager);
|
|
若要运行 XPath 查询并返回选定的节点,请将表达式传递给 XPathNodeIterator 的 Select 方法: XPathNodeIterator iterator = oXPathNav.Select(Expr);
while (iterator.MoveNext())
{
this.textBox1.Text = this.textBox1.Text + "\r\n"+ iterator.Current.Value ;
}
|
|
Button1_Click 事件中的代码应显示如下: XmlDocument oxmldoc = new XmlDocument();
try
{
oxmldoc.Load("c:\\Books.xml");
XPathNavigator oXPathNav;
oXPathNav = oxmldoc.CreateNavigator();
XPathExpression Expr;
Expr = oXPathNav.Compile("//bk:Book[position()>=2]");
XmlNamespaceManager oxmlNSManager = new XmlNamespaceManager(oXPathNav.NameTable);
oxmlNSManager.AddNamespace("bk", "http://myserver/myschemas/Books");
Expr.SetContext(oxmlNSManager);
XPathNodeIterator iterator = oXPathNav.Select(Expr);
while (iterator.MoveNext())
{
this.textBox1.Text = this.textBox1.Text + "\r\n"+ iterator.Current.Value ; //在这里已经查找并移动到符合条件的节点,在这里就可以进行我们想要的操作像插入,更新,删除等. //iterator.Current.InsertAfter("<xs:element name=\"newitem\" type=\"xs:string\" />");插入
}
oxmlNSManager = null;
oXPathNav = null;
oxmldoc = null;
}
catch (Exception exc)
{
MessageBox.Show(exc.Message);
}
|
|
生成并运行该项目。 |
|
单击 Button1。 注意,文本框中将出现一个书籍列表,这些书的位置大于或等于 2。 |