C#高级编程之处理XML-连载三

时间:2010年04月12日 点击:125

23.3  .NET中使用MSXML

如果用Microsoft最新的分析器(目前是MSXML 4.0)开发大量的代码,会怎么样?如果要在.NET中使用它们,您会从头开始编写吗?使用MSXML 4.0 DOM对象模型会简单一些吗?您会立即转而使用.NET吗?

当然不会。XML 4.03.02.0可直接在应用程序中使用。在解决方案中添加一个MSXML4.DLL引用,就可以开始编写代码。

下面几个示例将使用books.xml作为数据源。books.xml可以从Wrox网站(http://www.wrox.com/)上下载,它也包含在.NET SDK的几个示例中。books.xml文件是图像书店的书目清单,包含类型、作者姓名、价格和ISDN号码等信息。本章中的所有代码示例也可以在Wrox网站上得到。要运行这些示例,XML数据文件必须在如下所示的路径结构中:

/XMLChapter/Sample1

/XMLChapter/Sample2

/XMLChapter/Sample3

...      

可以调用所需要的目录,但相对位置是非常重要的。也可以修改示例,使之指向需要的地址。示例代码中的注释说明了应修改哪些代码行。

下面是books.xml文件:

<?xml version='1.0'?>

<!-- This file represents a fragment of a book store inventory database -->

<bookstore>

   <book genre="autobiography" publicationdate="1981" ISBN="1-861003-23-0">

      <title>The Autobiography of Benjamin Franklin</title>

      <author>

         <first-name>Benjamin</first-name>

         <last-name>Franklin</last-name>

      </author>

      <price>8.99</price>

   </book>

   <book genre="novel" publicationdate="1967" ISBN="0-201-63361-2">

      <title>The Confidence Man</title>

      <author>

         <first-name>Herman</first-name>

         <last-name>Melville</last-name>

      </author>

      <price>11.99</price>

   </book>

   <book genre="philosophy" publicationdate="1991" ISBN="1-861001-57-6">

      <title>The Gorgias</title>

      <author>

         <name>Plato</name>

      </author>

      <price>9.99</price>

   </book>

</bookstore>

上面的一些代码使用MSXML 4.0books.xml中加载一个带有ISDN的列表框。完整的代码可以从下载的MSXML_Sample文件夹中找到,可以把它们复制到Visual Studio IDE中,或者从头开始新建一个Windows窗体,该窗体包含一个列表框和一个按钮,它们都使用listBox1button1的默认名称,button1Text属性设置为Load XML

注意,因为MSXML 4是一个基于COM的组件,所以需要创建交互操作的程序集。最简单的方式是在Visual Studio IDEProject菜单中选择Add Reference,进入COM选项卡,选择Microsoft XML, v4.0 (v3.0, v2.6).。可以把MSXML2看做在Solution Explorer中添加的命名空间。为什么是MSXML2?在导入COM组件时,为新程序集提供的命名空间是该COM组件的类型库名。在本例中,它就是MSXML2。如果使用TLBIMP,就可以把命名空间改为其他名称。

下面看看MSXML_sample示例代码中最重要的代码行。

因为已经有了引用,所以添加如下代码:

using MSXML2;

还需要一个类级的变量:

private DOMDocument40 doc;

现在准备在应用程序中使用MSXML

我们要从列表框中获取ISBN,使用一个简单的XPath搜索,就可以知道匹配的书籍节点,在消息框中显示该节点的文本(书名和价格)XML Path Language (XPath)是一种XML记号,可以用于查询和过滤XML文档中的文本。本章的后面介绍如何在.NET中使用XPath

下面是在列表框中选择条目的事件处理程序代码:

protected void listBox1_SelectedIndexChanged (

                          object sender, System.EventArgs e)

{

   string srch=listBox1.SelectedItem.ToString();

   IXMLDOMNode nd=doc.selectSingleNode(

                           "bookstore/book[@ISBN='" + srch + "']");

   MessageBox.Show(nd.text);

}

下面编写单击按钮的事件处理程序。首先,加载books.xml文件,注意,如果没有在bin/debug bin/release文件夹中运行可执行文件,就需要适当地调整路径:

protected void button1_Click (object sender, System.EventArgs e)

{

   doc=new DOMDocument40 ();

   doc.load("..\\..\\..\\books.xml");

下面的代码声明nodes是书籍节点的一个节点列表,在本例中有3个书籍节点:

   IXMLDOMNodeList nodes;

   nodes = doc.selectNodes("bookstore/book");

   IXMLDOMNode node=nodes.nextNode();

迭代这些节点,把ISBN属性的文本值添加到listBox1中:

   while(node!=null) 

   {

      listBox1.Items.Add(node.attributes.getNamedItem("ISBN").text);

            node=nodes.nextNode ();

   }

}

23-1是执行该示例后所得到的屏幕图,单击按钮,把数据加载到列表框中。然后选择列表框中的一项。

智动软件

赞助商链接

热门内容

相关内容

联系我们

联系方式