Chinaopub.com 下载 第11章使用XML数据 读者可能会觉得在一本ASP书中讲述本章内容不太合适,事实上扩展标记语言( e Tensible Markup Language,xML)正在越来越深入我们的生活,这是一件好事。XML可以跨越所有边 界,要获得真正独立的、跨平台的数据传送格式,XML可能是唯一的选择 这种说法可能会令人感到沮丧,但在计算机业内XML几乎得到了所有大型(或小型)开发 厂商的认可。标准能达到如此的统一,过去也只有在TCP/P协议被采纳为网络协议的标准时 出现过这种现象。XML是一种国际标准,受一个工业标准团体的控制,得到全世界的广泛支 持,并成为为数不多的只有一个标准的技术之 读者可能会觉得很奇怪,当今世界各种标准的变化就像季节更替一样频繁,即使是单个 标准也被多个公司分成数段以追求竞争优势。然而,XML却是个例外,因为它确实获得了许 多公司的广泛支持。令人惊奇的是所有的人似乎都在努力实现并遵循这种唯一的标准。如果 回想一下过去给工业界造成那么多麻烦的有关标准问题的争论,XML就更令人惊奇了 既然XML是一个被普遍实现的标准,因此,在ASP中使用它也很简单。如果使用ASP创 建一个web站点,那么很有可能会使用某种形式的数据库来存储数据。而XML是另一种存储 数据的格式,其应用也越来越广泛,因此必须掌握它。当然XML的功能不仅于此 本章将讨论以下内容 XML数据的含义 ·文档对象模型( Document Object Model,DOM是什么以及如何使用 Active X数据对象(ADO)怎样使用XML以及如何提高性能 ·如何才能使ⅩML看上去更美观 尽管立刻得到全面支持还不大可能,但我们已经看到XML支持确实已引入到IE和ADO中。 困难在于IE和ADO的发展速度不一致,所以它们之间的交互还不够理想,故本章没有介绍人 们所希望的有关数据传输的万能技术。在写这本书时,IE和ADO的结合还不是紧密,但它们 都在不断改进。所以尽管现在还没有新版本发布的具体消息,但ADO和IE将来肯定会更好地 结合 11.1XML的定义 在给ⅹML一个明确的定义之前,最好了解什么是标记语言。首先这里有一个问题,因为 语言”这个术语用得并不恰当。实际上,ⅹML并不是编程语言,而VB或C++才是真正的编 程语言,ⅹML只是定义了如何标记文本或文档的一套规则。那么“标记”又是指什么?标记 个文档是指标识出文档的某些部分有特殊含义的过程。这可能难以理解,我们举一个有关 超文本标记语言( Hypertext Markup Language,HIML)的例子,因为“HTML”中的“M”就 代表了标记( Markup) HTML是一套规定文档布局的标记。HTML包含了一些预先定义好的标记,每一种标记都 有各自的含义,例如:
下载 第11章 使用XML数据 读者可能会觉得在一本A S P书中讲述本章内容不太合适,事实上扩展标记语言 ( e X t e n s i b l e Markup Language,X M L )正在越来越深入我们的生活,这是一件好事。 X M L可以跨越所有边 界,要获得真正独立的、跨平台的数据传送格式, X M L可能是唯一的选择。 这种说法可能会令人感到沮丧,但在计算机业内 X M L几乎得到了所有大型 (或小型)开发 厂商的认可。标准能达到如此的统一,过去也只有在 T C P / I P协议被采纳为网络协议的标准时 出现过这种现象。 X M L是一种国际标准,受一个工业标准团体的控制,得到全世界的广泛支 持,并成为为数不多的只有一个标准的技术之一。 读者可能会觉得很奇怪,当今世界各种标准的变化就像季节更替一样频繁,即使是单个 标准也被多个公司分成数段以追求竞争优势。然而, X M L却是个例外,因为它确实获得了许 多公司的广泛支持。令人惊奇的是所有的人似乎都在努力实现并遵循这种唯一的标准。如果 回想一下过去给工业界造成那么多麻烦的有关标准问题的争论, X M L就更令人惊奇了。 既然X M L是一个被普遍实现的标准,因此,在 A S P中使用它也很简单。如果使用 A S P创 建一个We b站点,那么很有可能会使用某种形式的数据库来存储数据。而 X M L是另一种存储 数据的格式,其应用也越来越广泛,因此必须掌握它。当然 X M L的功能不仅于此。 本章将讨论以下内容: • XML数据的含义。 • 文档对象模型(Document Object Model,D O M )是什么以及如何使用。 • Active X 数据对象( A D O )怎样使用X M L以及如何提高性能。 • 如何才能使X M L看上去更美观。 尽管立刻得到全面支持还不大可能,但我们已经看到 X M L支持确实已引入到I E和A D O中。 困难在于I E和A D O的发展速度不一致,所以它们之间的交互还不够理想,故本章没有介绍人 们所希望的有关数据传输的万能技术。在写这本书时, I E和A D O的结合还不是紧密,但它们 都在不断改进。所以尽管现在还没有新版本发布的具体消息,但 A D O和I E将来肯定会更好地 结合。 11.1 XML的定义 在给X M L一个明确的定义之前,最好了解什么是标记语言。首先这里有一个问题,因为 “语言”这个术语用得并不恰当。实际上, X M L并不是编程语言,而 V B或C + +才是真正的编 程语言,X M L只是定义了如何标记文本或文档的一套规则。那么“标记”又是指什么?标记 一个文档是指标识出文档的某些部分有特殊含义的过程。这可能难以理解,我们举一个有关 超文本标记语言 (Hypertext Markup Language,H T M L )的例子,因为“H T M L”中的“M”就 代表了标记( M a r k u p )。 H T M L是一套规定文档布局的标记。 H T M L包含了一些预先定义好的标记,每一种标记都 有各自的含义,例如:
340Asp高箱程 下载 Here we have some text H1>This is a heading</H1> This bit is normal tex And finally some more normal text </BODY> 这是一个含有少量标记的文本。文本以<BODY>标记开始,在HTML里,该标记表示文 档主体的开始,主体部分以</BODY>标记结束。在这个文档的主体内有标题,放在<H1>和 </H1>标记之间:另外还有一些粗体文本,放在<B>和</B>标记之间。这些文本标记为有特殊 含义的文本。 你可能注意到上面的例子没有使用格式化这个词。这是经过仔细考虑的,因为标记和格 式化并不是一回事。<BODY>标记标定的是文档的一块区域,并没有定义任何格式。然而, <B>标记却标定文档的这一块区域用粗体显示。这是因为HIML中的<B>标记是隐含了指定格 式的标记 所以请记住,标记语言只是一种规则,定义了如何给一篇文档中的特定部分增加特殊含 义。这种定义可能会起到很好的格式化作用,但这并不是使用标记的唯一原因 11.1.1XML和HTML的差别 尽管XML和HTML都使用标记,但是它们是不同的。其中最主要的区别是XML专门用来 描述文本的结构,而不是用于描述如何显示文本。ⅹML并没有一套固定的标记,例如: <BODY> Here we have some text <Hl>This is a heading</H1> This bit is normal text <B>This is some ld text</B> nd finally some more normal text </BODY> 上面的代码看起来与上一节的HTML代码不是完全一样吗?如果它是HTML文档,的确 样。如果把其加载到浏览器,以上内容就会显示如图11-1所示的结果,其作用好像是格式化 文档 I Fle E&t View Favorites Too Help This is a heading This bit is normal text This is some bold text And fnally some more normal text 图11-1浏览器中显示的HTML文档 但是,如果上面的代码是XML文档,那么其中的标记就不具有任何含义,其内容只是说 有一个名为BODY的标记,在这个标记里面有一些文本
这是一个含有少量标记的文本。文本以 < B O D Y >标记开始,在 H T M L里,该标记表示文 档主体的开始,主体部分以 < / B O D Y >标记结束。在这个文档的主体内有标题,放在 < H 1 >和 < / H 1 >标记之间;另外还有一些粗体文本,放在 < B >和< / B >标记之间。这些文本标记为有特殊 含义的文本。 你可能注意到上面的例子没有使用格式化这个词。这是经过仔细考虑的,因为标记和格 式化并不是一回事。 < B O D Y >标记标定的是文档的一块区域,并没有定义任何格式。然而, < B >标记却标定文档的这一块区域用粗体显示。这是因为 H T M L中的< B >标记是隐含了指定格 式的标记。 所以请记住,标记语言只是一种规则,定义了如何给一篇文档中的特定部分增加特殊含 义。这种定义可能会起到很好的格式化作用,但这并不是使用标记的唯一原因。 11.1.1 XML和H T M L的差别 尽管X M L和H T M L都使用标记,但是它们是不同的。其中最主要的区别是 X M L专门用来 描述文本的结构,而不是用于描述如何显示文本。 X M L并没有一套固定的标记,例如: 上面的代码看起来与上一节的 H T M L代码不是完全一样吗?如果它是 H T M L文档,的确一 样。如果把其加载到浏览器,以上内容就会显示如图 11 - 1所示的结果,其作用好像是格式化 文档。 图11-1 浏览器中显示的H T M L文档 但是,如果上面的代码是 X M L文档,那么其中的标记就不具有任何含义,其内容只是说 明: • 有一个名为B O D Y的标记,在这个标记里面有一些文本。 340计计ASP 3 高级编程 下载
第1使数341 下载 有一个名为H的标记,在这个标记里面有一些文本 有一个名为B的标记,在这个标记里面有一些文本 如果以上代码作为一个XML文档(文件的扩展名为xm)加载到I浏览器中,可以看得非常 清楚,其结果如图11-2所示 Here we have some text <H1>This is a heading</H1> <B>This is some bold text</B> And finally some more normal text e Done 图11-2浏览器中显示的XML文档 IE解释该XML文档并将其显示出来。请注意,IE并没对这个XML文档做任何处理,仅仅 是显示出来而已。浏览器知道如何解释HTML文档,并且知道如何用标记所定义的格式来显 文档。同样,浏览器也知道如何解释XML文档,但由于XML标记不定义格式,所以文档不 会得到格式化,于是原样显示这些标记 但IE实际上还是做了一点格式编排,使ⅩML更易读了。它把标记分为不同的层 次,所以我们看到了一套结构化的标记,且I没有解释这些标记。 迄今为止所学的XML文档由标记文档某些部分的标记组成。那么XML使用数据会有什么 问题呢,再看另一个例子。这个例子在前面的章节中出现过,读者会发现ⅹML在这里十分 uthors auid>172-32-1176</ au id au lname>White</au lname </Author> auid>213-46-8915</auid> au_lname>Green</aulname> sau_fname>Marjorie</au_fname> </Author> <Author <au_id>238-95-7766</auid> au_lname>carson</au_lna sau_ fname>cheryl</au_fname </Author> 上面的例子中使用了几对不同的标记。一开始,你可能会认为这些标记一定有其含义 他们都有一个有意义的名称,定义了 Author的一个列表、单个 Author以及一些与 Author有 关的值。在前面的章节中,这些内容出现了多次,当在一个浏览器中查看时,我们可以把 它格式化成一个表来显示。但因为这是XML,XML中的标记不代表任何意义,如图11-3所
• 有一个名为H 1的标记,在这个标记里面有一些文本。 • 有一个名为B的标记,在这个标记里面有一些文本。 如果以上代码作为一个X M L文档(文件的扩展名为. x m l )加载到I E浏览器中,可以看得非常 清楚,其结果如图11 - 2所示。 图11-2 浏览器中显示的X M L文档 I E解释该X M L文档并将其显示出来。请注意, I E并没对这个X M L文档做任何处理,仅仅 是显示出来而已。浏览器知道如何解释 H T M L文档,并且知道如何用标记所定义的格式来显 示文档。同样,浏览器也知道如何解释 X M L文档,但由于X M L标记不定义格式,所以文档不 会得到格式化,于是原样显示这些标记。 但I E实际上还是做了一点格式编排,使 X M L更易读了。它把标记分为不同的层 次,所以我们看到了一套结构化的标记,且 I E没有解释这些标记。 迄今为止所学的X M L文档由标记文档某些部分的标记组成。那么 X M L使用数据会有什么 问题呢,再看另一个例子。这个例子在前面的章节中出现过,读者会发现 X M L在这里十分有 意义。 上面的例子中使用了几对不同的标记。一开始,你可能会认为这些标记一定有其含义。 他们都有一个有意义的名称,定义了 A u t h o r的一个列表、单个 A u t h o r以及一些与 A u t h o r有 关的值。在前面的章节中,这些内容出现了多次,当在一个浏览器中查看时,我们可以把 它格式化成一个表来显示。但因为这是 X M L,X M L中的标记不代表任何意义,如图 11 - 3所 示。 第11章 使用X M L数据计计341 下载
342 SP3高级编程 China pub coM 下载 BMtp//uc/ mywebs/AsPC1 AuthorsAEXML,xm回区 File Edit View Favorites Tools Help <Authors> <auid>172-32-1176</au cau fname> Johnson</au </Author> <Author> <au_d213-46-8915</au_d <au_Iname>Green</au Iname> ame>Marjorie</au_fname> </Author> <Authory au_id>238-95-7766</au|d> tau Iname Carson</au Iname> cau_fname> cheryl</au_name> /Author </Authors> 厂厂 Loce intranet 图11-3IE浏览器中显示的XML 可见,这里IE没有对其进行任何处理。所以即使这些标记对我们来说是有意义的,但它 们对XML却没有。事实上,这段代码可以写成如下形式: <HubbaHubbahubbas> <HubbaHubbaHubba foo>172-32-1176</foo> <bar>white</bar> <qwerty>Johnson</qwerty> /HubbaHubbaHubba> <HubbaHubbaHubbas foo>213-46-8915</foo> bar>Green</bar werty>Marjorie/qwerty> <HubbaHubbaHubba> <foo>238-95-7766</foo> <barCarson</bar> <qwerty>cheryl</qwerty> hUbba> 浏览器只是把这些标记原封不动地显示出来,如图11-4所示 标记可以是你所喜欢的任意符号。当然,一开始就给其一个有意义的名字是很直观的 ⅹML的可读性十分强,所以一般使用能描述其内容的标记名字。 在此,已经看到XML由一系列能描述文档各部分的标记组成。在以上使用 Author信息的 例子中,使用ⅹML来描述数据,使用了代表数据字段名的标记名。这就是XML能作为一种数 据交换格式的真正含义。它是标准的文本,所以可以很容易地从一台机器传送到另一台机器 但它并不是一种专用格式,所以任何人都可以读懂,并且如果标记名取得有意义的话,XML 数据就具有“自我描述”的功能
图11-3 IE 浏览器中显示的X M L 可见,这里I E没有对其进行任何处理。所以即使这些标记对我们来说是有意义的,但它 们对X M L却没有。事实上,这段代码可以写成如下形式: 浏览器只是把这些标记原封不动地显示出来,如图 11 - 4所示。 标记可以是你所喜欢的任意符号。当然,一开始就给其一个有意义的名字是很直观的。 X M L的可读性十分强,所以一般使用能描述其内容的标记名字。 在此,已经看到 X M L由一系列能描述文档各部分的标记组成。在以上使用 A u t h o r信息的 例子中,使用X M L来描述数据,使用了代表数据字段名的标记名。这就是 X M L能作为一种数 据交换格式的真正含义。它是标准的文本,所以可以很容易地从一台机器传送到另一台机器。 但它并不是一种专用格式,所以任何人都可以读懂,并且如果标记名取得有意义的话, X M L 数据就具有“自我描述”的功能。 342计计ASP 3 高级编程 下载
Chinapub.coM 第1使用数343 下载 ahttp://kubrick/mywebs/ASP3C11/HubbaAXML File Edit View Favorites Tool: Help <HubbaHubbaHubbas> <HubbaHubbaHub foo>172-32-1176</foo <bar> white</bar> qwerty>Johnson</qwerty> </HubbaHubbaHubba> HubbaHubbaHubba> <foo>213-468915</foo> <bar Green</bar> <qwerty>Marjorie<c/qwerty> </HubbaHubbaHubba> <HubbaHubbaHubba> <foo>238-957766</foo <bar> Carson</bar> <qwerty> cheryl</qwerty> </HubbaHubbaHubba> </HubbaHubbaHubbas> 厂 Local intranet 图11-4浏览器显示的代码 现在你应该理解了XML数据的含义,下面再来看一些术语,以及XML的不同方法 11.12标记和元素 使用了“标记”这个名字来确定某些HTML的标记,比如<B>或<H1>。元素是指利用这 些标记而形成的一个整体。例如 <B>Some bold text and <Italic</I> text</B> 这一行由两个开始标记和两个结束标记组成,但只有两个元素。B元素由下面这一行 <B>Some bold text and <I>italic</I> text</B> 而I元素由下面这一行组成: <I>italic</I> 因此,一个元素由一个开始标记和一个结束标记组成,它们把文本包围在中间,其中也 可以包括其他子元素。这一点很重要,因为这牵涉到一个“形式化的XML”的概念,其中每 个开始标记都必须有一个对应的结束标记。这一点与HTML40及其以前的版本不同,在那 些HTML版本中,某些标记没有结束标记(例如<IMG>和<BR>)和<P标记。 如果使用ⅹML来描述数据,有可能在一些域中不包含数据。在这种情况下,标记就为空。 在XML中有两种方法可以定义空标记。第一种方法是使用一个开始标记和一个结束标记,但 其中没有内容 <TagName></TagName> 第二种方法只使用一个开始标记,但在标记后面加上斜杠: <TagName/> 形式化的XML的另一层含义是ⅹML的标记是大小写敏感的,所以在这种情况下开始标记 和结束标记必须一致。这也意味着下面这一行是无效的XML
图11-4 浏览器显示的代码 现在你应该理解了X M L数据的含义,下面再来看一些术语,以及 X M L的不同方法。 11.1.2 标记和元素 使用了“标记”这个名字来确定某些 H T M L的标记,比如< B >或< H 1 >。元素是指利用这 些标记而形成的一个整体。例如: 这一行由两个开始标记和两个结束标记组成,但只有两个元素。 B元素由下面这一行组 成: 而I元素由下面这一行组成: 因此,一个元素由一个开始标记和一个结束标记组成,它们把文本包围在中间,其中也 可以包括其他子元素。这一点很重要,因为这牵涉到一个“形式化的 X M L”的概念,其中每 一个开始标记都必须有一个对应的结束标记。这一点与 HTML 4.0及其以前的版本不同,在那 些H T M L版本中,某些标记没有结束标记 (例如< I M G >和< B R > )和< P >标记。 如果使用X M L来描述数据,有可能在一些域中不包含数据。在这种情况下,标记就为空。 在X M L中有两种方法可以定义空标记。第一种方法是使用一个开始标记和一个结束标记,但 其中没有内容: 第二种方法只使用一个开始标记,但在标记后面加上斜杠: 形式化的X M L的另一层含义是X M L的标记是大小写敏感的,所以在这种情况下开始标记 和结束标记必须一致。这也意味着下面这一行是无效的 X M L: 第11章 使用X M L数据计计343 下载