http://msdn.microsoft.com/downloads/default.asp?url=/downloads/sample.asp?url=/msdn-files/027/001/766/msdncompositedoc.xml

解决方案 »

  1.   

    Microsoft.XMLHTTP是用来解析XML的?
      

  2.   

    由Microsoft.XMLHTTP创建的对象是一个与XMLDOM无关的对象,具体可见相关资料。
      

  3.   

    我不知道它们是干什么的,应该与xml有关,
    我现在需要用js解析xml文件,但是查不到相关资料
    那位帮忙,谢谢.也可以发送到
      

  4.   

    http://support.microsoft.com/default.aspx?scid=kb;[LN];Q290761
      

  5.   

    我转贴
    Frequently Asked Questions about ServerXMLHTTP
    The information in this article applies to:
    Microsoft XML 3.0
    Microsoft XML 4.0This article was previously published under Q290761 
    SUMMARY
    This article answers some of the frequently asked questions about the ServerXMLHTTP object. 
    MORE INFORMATION
    What is ServerXMLHTTP?ServerXMLHTTP provides methods and properties for server-safe HTTP access between different Web servers. You can use this object to exchange XML data between different Web servers.
    How do you install ServerXMLHTTP?ServerXMLHTTP is included with the Microsoft XML Parser (MSXML) version 3.0 or later. You can download and install MSXML 3.0 from the following Microsoft Developer Network (MSDN) Web site: 
    http://msdn.microsoft.com/xml/default.aspFor additional information on redistributing the parser, click the article number below to view the article in the Microsoft Knowledge Base: 
    278969 INFO: How to Redistribute the Microsoft XML Parser What are the platform requirements for ServerXMLHTTP?ServerXMLHTTP support is only available on computers that have Microsoft Windows 2000 installed or on computers that have Microsoft Windows NT 4.0 with Microsoft Internet Explorer 5.01 (or later) installed. It fails on other platforms, such as Microsoft Windows 95 and Microsoft Windows 98.
    What is the difference between XMLHTTP and ServerXMLHTTP?XMLHTTP is designed for client applications and relies on URLMon, which is built upon Microsoft Win32 Internet (WinInet). ServerXMLHTTP is designed for server applications and relies on a new HTTP client stack, WinHTTP. ServerXMLHTTP offers reliability and security and is server-safe. For more information, see the MSXML Software Development Kit (SDK) documentation.
    How do you choose between XMLHTTP and ServerXMLHTTP? As the name suggests, ServerXMLHTTP is recommended for server applications and XMLHTTP is recommended for client applications. XMLHTTP has some advantages such as caching and auto-discovery of proxy settings support. It can be used on Windows 95 and Windows 98 platforms, and it is well-suited for single-user desktop applications.
    What is the Proxy Configuration Utility? The WinHTTP Proxy Configuration Utility, Proxycfg.exe, allows you to configure WinHTTP to access HTTP and HTTPS servers through a proxy server. Because the ServerXMLHTTP component depends on WinHTTP proxy settings, an administrator can use the Proxycfg.exe utility as part of the deployment and installation process of an application that uses WinHTTP. For more information, see the following Microsoft Knowledge Base article: 
    289481 INFO: Proxy Configuration Utility Must Be Run for ServerXMLHTTP to Work Does ServerXMLHTTP support SSL and Digital Certificates? The ServerXMLHTTP and XMLHTTP components have limited HTTPS support in MSXML3. Specifically, they do not fully support Secure Sockets Layer (SSL) certificates, which are used for authentication. The components do support the HTTPS protocol, but the request fails if the server requires a client certificate.ServerXMLHTTP includes SSL certificate support in MSXML 3.0 Service Pack 1.
    What are the benefits of ServerXMLHTTP?
    By using ServerXMLHTTP, XML data can be exchanged between local and remote systems as a stream or as XML documents.
    Because the underlying protocol is HTTP or HTTPS, data can be exchanged between the systems that are behind firewalls.
    ServerXMLHTTP can be used to send HTTP requests from different environments such as Active Server Pages (ASP), Microsoft Visual Basic, and Microsoft Visual C++. 
    What are the limitations of ServerXMLHTTP? The number of instances of ServerXMLHTTP that can exist simultaneously within a single process primarily depends upon the amount of memory available for applications on the system. However, other factors, such as CPU processing capacity, or available socket connections can further limit the number of instances that can be active simultaneously. With MSXML 3.0, the maximum number of instances that can exist simultaneously within a single process is 5,460. 
    Where can I find more information on ServerXMLHTTP? Most of the information in this article is gathered from the MSXML SDK, which can be downloaded from the XML section of the following MSDN Web site: 
    http://msdn.microsoft.com/xml/default.aspThis site has the latest information on MSXML technologies.
      

  6.   

    XMLHTTP: 网站超级粘合剂 
      翻译:Batman 
       
      简介 
       许多ASP开发者都希望在自己的网站中能够使用到微软提供的支持XML 
      的新功能。其中,有些人发现可以使用XML来装饰网站,但是,如果仅仅 
      是只使用XMLDOM的话,你就会失去其他一些更重要的东西。毕竟,XML是用来 
      作为一种网上数据表现和数据交换的形象出现的。尽管使用XML可以非常满意 
      地描绘你的数据,但是开发者却不得不使用CGI来进行浏览器和服务器之间的 
      数据交换,除非你在浏览器端和客户端都使用XML文档。 
       当然CGI从传达信息的角度来说是能够完全胜任的,但是如果要是和XML来 
      一起使用的话就让XML失去了很多自己的用处。幸运的是,微软提供了一种更加 
      有效的方法来传输XML,虽然该方法在很大程度上并不被人所重视。 
       在微软提供的MSXML解释器包中有一系列的对象,也许没有人会重视其中的 
      XMLHTTPConnection对象。简而言之,它允许你打开一个到服务器上的HTTP连接, 
      发送一些数据和取回一些数据。并且所有的这一切都是在很少的几段脚本中就能够实现。 
      使用XMLHTTP对象通常是进行XML数据交换,但其他格式的数据也是允许的。 
       
      在商业程序中的运用 
       这种交换类型的标准模式是客户端发送一个XML格式的文本字符串到服务端, 
      然后服务端将这个字符串装载入一个XMLDOM对象中并且解释它,然后返回一段 
      HTML给客户端,或则是另外一段XML代码给客户端让客户端的浏览器自己解释。 
      在这种方式下,对于信息的传递来说是非常有效的形式,尤其是当你使用 
      DHTML允许你根据返回信息动态显示时。 
       举例如下(只能够运行在客户端和服务端都安装有IE5的情况下) 
       <% 
       if (Request.ServerVariables("REQUEST_METHOD") == "POST" ) 
       { 
       var req= Server.CreateObject("Microsoft.XMLDOM"); 
       req.async=false; 
       req.load(Request); 
       if (req.documentElement.nodeName=="timesheet") 
       { 
       //对数据随便进行一些处理 
       ..... 
       Response.write("<h1>Timesheet Updated!</h1><b>"+req.documentElement.text+"</b>"); 
       } 
       } 
       else 
       { %> 
       
       <div id="divDisplay">The response will be put in here</div> 
       <input type="button" onclick="sendData();" value="Send it!"> 
       <script> 
       function sendData(){ 
       var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
       xmlhttp.Open("POST", "http://www.yoursite.com/thispage.asp", false); 
       xmlhttp.Send("<timesheet>An impossibly useless timesheet fragment</timesheet>"); 
       divDisplay.innerHTML=xmlhttp.responseText; 
       } 
       </script> 
      <% } %> 
       
       在上面的代码中,其中客户端的脚本将建立一个适当的COM对象,打开一个在网站 
      www.yoursite.com的连接(使用了HTTP的POST方法,同步方式),使用Send方法发送 
      一个XML片段,然后根据服务器上的响应填充divDisplay区域(这里使用了DHTML)。 
      具体的执行过程是,在服务器上,Request对象被转载入一个XML文档然后被解释器解释。 
      服务器响应XMLHTTP连接的方式和响应其他任何方式的HTTP连接是一样的,也是使用了 
      Response对象。注意的是XMLHTTP本身并不检查request或则response的有效性,也就是说 
      Request或则Response中的数据可是并不需要一定是XML文档。 
       “聪明,”你也许会说。“但是为什么我们不使用CGI来代替它呢?”呵呵,我们要注意 
      这样一件事,就是如果使用这种方式进行客户端--服务端的交互时整个页面并没有被刷新。 
      我们都知道,如果要是通过CGI来做任何事情都必将导致浏览器接收一个完整的新页面,而 
      这尤其影响网站上的访问者,因为他们不得不把所有的时间都用来等候整个页面下载完毕。 
      同样,CGI对于网站服务器来说也是一个负担,因为它不得不把宝贵的处理器循环周期和带宽 
      消耗在新页面的所有部分。如果这样的操作只是一次或则两次倒无所谓,但是如果是对任何 
      一个电子商务网站或则一个基于Web的电子邮件系统,这将意味着大量的同样的基本页面信息 
      被重复一次又一次的装载。 
       同样,如果是通过CGI在网站运用程序中使用XML,服务端一般都将不得不根据数据来建立 
      XML的文档,然后才能够对这些文档进行自己需要的处理。在这种方式下,服务器将花费 
      大量的精力在处理如何建构这些XML文档上,尤其是当需要传送的数据量很大时。 
      所以如果是让客户端的浏览器来建立这个XML文档,并且在建立完毕后通过XMLHTTP将最后的 
      产品传递给服务器,这将大大减轻服务端的代码量和负担。 
       这种类型的问题的一个例子是给服务器上的XML文档增加数据。如果是使用CGI的话,那么 
      就需要频繁的查询一个CGI的form,然后才能够构建一个加入XML文档的XML节点。而如果是使用 
      XMLHTTP需要做的仅仅是把这个XML节点传递给服务端就可以了。 
       
       上面说讨论的是XMLHTTP基本部分,有关它的详细例子你可以在Microsoft Developers 
      Network中找到例子 。虽然使用这种通讯方式可以大有作为,我在我自己的运用中仅仅只是 
      使用到了很少的一部分,也许任何一个聪明的开发者都能够发现更多的运用事例。 
       
       使用XMLHTTP而不是CGI(即使是我们心爱的ASP)能够让我编写更多野心勃勃的网站运用 
      程序,因为现在我们所关心的简单到只是我们需要发送的数据而已。从而使用很少的代码 
      就能够实现非常复杂的功能,而CGI对于用户每一个可能的操作都需要我们来完完整整地 
      生成一个新的页面。 
       但是由于目前并不是所有的浏览器都支持MSXML,许多使用ASP编写的为了非企业内部 
      目的的运用程序需要支持CGI的交互。但是欣慰的是,编写一个同时支持CGI和XMLHTTP数据 
      的页面并不是很困难,并且将CGI的数据载入XML文档中花费的工作量也不是很大。 
      最简单的方式来判断数据是CGI的数据还是XML的数据就是判断数据的MIME类型. 
      XMLHTTP的MIME是一个空字符串,除非你特定了其他的MIME类型 (可以到这个连接 
      查看不同的MIME类型http://msdn.microsoft.com/xml/reference/scriptref/XMLHttpRequest_object.asp). 
      而许多CGI的MIME类型是"application/x-www-form-urlencoded" 
      下面就是一个来判断的代码片段: 
       
      <% 
      if (Request.ServerVariables("REQUEST_METHOD") == "POST" ) 
       { 
       if (Request.ServerVariables("CONTENT_TYPE")=="application/x-www-form-urlencoded") 
       {//如果是常规数据,让CGI来处理 
       Response.write(Request.form("stuff")); 
       
       } 
       else 
       {//如果是XMLHTTP连接,将Request对象转载入XML解释器 
       var req= Server.CreateObject("Microsoft.XMLDOM"); 
       req.resolveExternals=false; 
       req.validateOnParse=false; 
       req.async=false; 
       req.load(Request); 
       Response.write(req.documentElement.selectSingleNode("stuff").text); 
       } 
       } 
      else{ %> 
       
       这是一种简单明了的在同一个ASP页面中即可以处理CGI也可以处理XMLHTTP数据的方法。 
      并且它也提供了一种能够兼容在客户端安装了IE5.0以及使用其他其他浏览器浏览网站的模式。 
       或则也可以采取另外一种方法,就是我对所有的网站运用程序还是采用以前的CGI接口, 
      但是在其他类型的客户端运用程序使用XMLHTTP方法,例如Microsoft Office运用程序。 
      XMLHTTP的功能并不仅仅局限在浏览器上,我在Microsoft Office的VBA开发程序中使用XMLHTTP 
      取得了巨大的成功。现在我假设我被要求使用XML技术在更新我公司服务器上的Excel电子表 
      格中的数据。Excel能够将HTML表格直接转载到自己的表格中,但是它不能够处理格式复杂的 
      页面,例如本页。数据除非使用了非常巧妙的技巧根本没法插入电子表格。 
       我的解决方法是编写了一个ASP页面来操纵通过XMLHTTP从Excel中传递过来的数据。 
      通过一个VBA的宏给服务器发送一个请求,然后将响应载入XML文档,通过解释器解释后再 
      插入Excel的电子表格中。这将是一个无痕的解决方案,简单的一个按钮也许会让你的老板、 
      同事或任何其他人的关系大有改观。 
       下面是我实现上述方法的一个代码片段。它使用XMLHTTP将服务器中的信息载入,然后将 
      其插入电子表格中。 
       
      Public Sub UpdateSheet() 
       
       Dim xmlhttp 
       Set xmlhttp = CreateObject("Microsoft.XMLHTTP") 
       Call xmlhttp.Open("POST", "http://www.yourserver.com/yourpage.asp", False) 
       Call xmlhttp.send("<reqtimesheet user='jimbob'/>") 
       
       Dim xmldoc 
       Set xmldoc = CreateObject("Microsoft.XMLDOM") 
       xmldoc.async = False 
       xmldoc.loadxml(xmlhttp.responsexml) 
       Worksheets("TimeSheet").Range("A1").Value = xmldoc.documentelement.getAttribute("firstname") 
       Worksheets("TimeSheet").Range("B1").Value = xmldoc.documentelement.getAttribute("lastname") 
       Worksheets("TimeSheet").Range("C37").Value = xmldoc.documentelement.selectSingleNode("totalhours").Text 
      End Sub 
       
       这个VBA的宏相当的简单。给服务器发送一个请求,然后将服务器上的响应插入 
      XML文档,然后更新Excel中cell中的内容。当然,我们可以使用这个技术做其他更多的运用。 
      例如从一个Office运用程序中上载数据到服务器上的XML文档中(XML应该是你首选的格式, 
      而不是Office 2000中提供的愚蠢的OfficeXML实现).或则把XML/ASP作为一个你数据库的shell 
      这样,你的运用程序对于数据库就有了一个简洁、统一的接口,而对数据库结构的 
      改动就不必要改动你所有的客户端代码了。 
       
       我发现XMLHTTP
      

  7.   


    本文出自:http://www.computerworld.com.cn 作者: 北京邮电大学 张剑 (2002-02-09 07:20:00) 
    1、DOM树 
    所有类型的XML解析器都要求处理对象是“格式良好”的XML文档,有些还能根据DTD或XML Schema进行有效性验证,DOM(Document Object Model)解析器将XML文档一次性解析,生成一个位于内存中的对象树用以描述该文档。 
    DOM是一种与平台和语言无关的接口,它允许程序和脚本动态访问和修改文档的内容、结构和类型。它定义了一系列的对象和方法对DOM树的节点进行各种随机操作: 
    ● Document对象:作为树的最高节点,Document对象是对整个文档进行操作的入口。 
    ● Element和Attr对象:这些节点对象都是文档某一部分的映射,节点的定级层次恰好反映了文档的结构。 
    ● Text对象:作为Element和Attr对象的子节点,Text对象表达了元素或属性的文本内容。Text节点不再包含任何子节点。 
    ● 集合索引:DOM提供了几种集合索引方式,可以对节点按指定方式进行遍历。索引参数都是从0开始记数的。 
    DOM树中的所有节点都是从Node对象继承而来的。Node对象定义了一些最基本的属性和方法,利用这些方法可以实现对树的遍历,同时,根据属性还可以得知节点的名称、取值并判断其类型。 
    利用DOM,开发人员可以动态地创建XML、遍历文档、增加/删除/修改文档内容。DOM提供的API与编程语言无关,所以对一些DOM标准中没有明确定义的接口,不同解析器的实现方法也可能有所差别。为方便描述,本文的举例均采用MSXML DOM方案并用VB Script编写代码。 
    2、DOM树的结构 
    Document对象建立之后,就可以与XML文档或数据岛联系在一起。数据岛的加载方法是将数据岛ID赋给Document对象: 
    <XML ID=“dsoDetails” src=“Books.xml”></XML> 
    Set doc = dsoDetails.XMLDocument 
    加载文档大体上分为三步: 
    1.使用CreateObject方法创建分析器实例; 
    2.设置async属性为False,禁止异步加载,这样当文档加载完毕,控制权才会返回给调用进程,如果想获取文档加载状态,可以读取readyState属性值; 
    3.使用load方法加载指定文档。 
    Set doc = CreateObject(“Microsoft.XMLDOM”) 
    doc.async = False 
    doc.load “Books.xml” 
    XML DOM还提供了一种loadXML的方法可以把XML字符串加载到DOM树中,使用时只要把XML字符串直接作为该方法的参数即可。 
    3、DOM树的访问 
    在文档加载完毕之后就可以使用documentElement属性访问根元素: 
    Set rootNode = doc.documentElement 
    一旦建立了对DOM树中某个节点(例如根节点)的引用,就可以根据节点间的等级关系调用适当的方法进行遍历。 
    下面以books.xml为例说明各种方法的使用: 
    <xml id=“dsoBooks”> 
    <?xml version=“1.0”?><booklist><book> 
    <title>The Gourmet Microwave</title>  
    <price>9.95</price> 
    <author>Charlotte M. Cooper</author> 
    <author>Shelley B. Burke</author> 
    <author>Regina P. Murphy</author> 
    </book><book> 
    <title>Sushi, Anyone?</title>  
    <price>14.99</price></book><book> 
    <title>Straight Talk About Computers</title> <price>19.99</price> 
    <author>Lars Peterson</author> 
    </book></booklist></xml> 
    建立对第二个<book>元素的引用: 
    Set theNode =dsoBooks.XMLDocument.documentElement.childNodes(1) 
    ● 根节点:theNode.ownerDocument返回Document节点,指向XML文档本身; 
    ● 兄弟节点:theNode.previousSibling返回第1个<book>元素,theNode.nextSibling返回第3个<book>元素; 
    ● 父节点:theNode.parentNode返回<booklist>元素; 
    ● 子节点:theNode.firstChild返回<title>元素,theNode.lastChild返回<price>元素,theNode.childNodes返回子节点集合,包括Sushi下面的所有元素。节点记数从0开始,即theNode.childNodes(0)的结果与theNode.firstChild的结果是一样的。 
    获得节点的引用后,就可以读取节点的相关信息: 
    ● 节点类型:theNode.nodeType,本例为1,Document对象类型为9,元素类型为1,属性类型为2; 
    ● 节点名称:theNode.nodeName,本例为book; 
    ● 节点值:theNode.nodeValue,本例为null,对于Attr节点,返回的是属性值,而对于Element节点,返回的是null。 
    在MSXML中,对Node对象还提供了一些额外的方法和属性: 
    ● nodeTypeString:用字符串的方式显示节点类型,如theNode.nodeTypeString的结果是“element”; 
    ● text: 显示当前节点及其所有子节点的文本内容; 
    ● xml:获取XML文档数据,通常是从根元素开始的所有内容。 
    4、XML格式的动态转换 
    通过学习XSL,我们已经能够使用样式单对XML文档进行转换。但这种过程是静态的,即在编写代码时,已经指定了作用在XML上的XSL文件,在程序运行过程中不能再做改变。而利用DOM,我们能够实现XML格式的动态转换,即在程序运行时,将XSL载入并对XML文档进行转换。 
    把XSL载入DOM对象的步骤基本上与XML文档的载入过程是一样的(XSL本身就是XML文档): 
    Set stylesheet = CreateObject(“Microsoft.XMLDOM”) 
    stylesheet.async = False 
    stylesheet.load “TransformDetails.xsl” 
    DOM提供了两个函数进行这种转换,作用对象可以是树中任何节点。这样就可以实现对DOM树的任意的部分进行格式转换。 
    ● transformNodeToObject方法:该方法需要两个参数,第一个参数指向XSL文件,第二个参数存放转换后的XML数据的节点。例如: 
    Set targetNode = CreateObject(“Microsoft.XMLDOM”) 
    srcNode.transformNodeToObject stylesheet, targetNode 
    ● transformNode方法:该方法只需要一个参数指明XSL文件。如下例是将源节点转换为一个字符串变量str: 
    str = srcNode.transformNode(stylesheet) 1、DOM解析时的错误 
    DOM在解析XML文档的时候可能会产生各式各样的错误,可以根据ParseError对象中的属性得知出错的可能原因及相关信息。 
    常用的属性及其含义如下表所示: 
    属性 说明 
    errorCode 错误代码 
    filepos 错误在文档中的绝对字符位置 
    line 错误所在行的行号 
    linepos 错误所在行的字符位置 
    reason 错误产生原因 
    srcText 错误所在行的源代码 
    url 最近一份含有解析错误的XML文档的URL地址 
     
      
    2、访问DOM树中的元素与属性 
    DOM还提供了许多查找节点的方法。其中基于搜索机制的方法有: 
    ● 根据标签名称搜索元素; 
    ● 使用XSL模式搜索节点; 
    ● 利用集合索引搜索节点。 
    以books.xml为例,Document对象中的getElementsByTagName方法就是根据参数中的标签名称在全文范围内查找元素的,返回值是一个NodeList对象: 
    Set doc = dsoDetails.XMLDocument  
    Set authors = doc.getElementsByTagName(“author”) 
    上述查询结果中包含了文档中出现的全部4位作者。如果调用的是Element对象中的getElementsByTagName方法,除了搜索范围缩小为该元素的所有后继节点之外,其他的情况都是一样的。 
    所有类型的节点都带有selectNodes方法,该方法的唯一参数是XSL的模式规则,返回值是匹配该规则的结果集合。调用这个方法可以利用XSL的模式匹配策略查找节点。例如: 
    Set rootNode = doc.documentElement  
    Set cheapbooks = rootNode.selectNodes(“//book[price < 10]”) 
    这个例子返回所有售价低于10元的<book>元素。另外,节点中的selectSingleNodes方法的用法与selectNodes是一样的,只是返回结果为查找到的满足条件的第一个节点而已。 
    对于元素节点,获取元素标签名称的方法有两种:anyElement.nodeName和anyElement.tagName。前者是Node对象的属性,后者是Element对象的属性。 
    如果想获取元素中的文本内容,如: <price>9.95 
    </price>时,访问Element对象中的nodeValue属性是错误的,这时返回结果是null,而不是预期的9.95。含有文本内容的元素都包含一个Text类型的子节点,所以只有通过Text对象中的nodeValue属性才能真正访问到文本内容。  
    添加元素的步骤如下: 
    ● 创建一个Text节点并赋值; 
    ● 创建Element节点; 
    ● 把Text节点挂在Element节点下,作为它的子节点; 
    ● 把Element节点插入到XML文档的合适位置上。 
    对于元素节点的删除和替换操作,首先都要对操作对象进行定位,然后相应地执行对象节点所属父节点的removeChild方法和replaceChild方法即可。 
    Attr节点的各种操作在原理上与Element节点相同。Attr对象同样继承了Node对象中的各种方法和属性,并且MSXML中还提供了name属性和value属性,能够更直接地访问到属性信息。另外,还可以通过属性所属元素的相关方法访问属性,如通过getAttribute和setAttribute方法读取属性值或修改属性值,或者用getAttributeNode方法直接返回Attr对象。 
    创建新属性最直接的办法就是使用Element对象中的setAttribute方法。也可以先用Document对象中的createAttribute方法设置属性值,然后使用Element对象中的setAttributeNode方法把新节点添加到DOM树中。同样地,删除属性最直接的方法是调用Element中的removeAttribute方法。另外一种方案是先用getAttributeNode方法对操作对象进行定位,然后执行removeAttributeNode操作。 
    从以上的介绍中可以看出,由于节点间的继承关系,以及各种类型节点本身提供的丰富的接口,用户可以很容易地找到一套适合自己需要的对象操作方案。 
      
    3、DOM的显示功能 
    DOM技术还可以用来显示XML数据。XSL样式单面向的是XML文档的转换,用于显示格式的转换是其应用的一个方面,所以在显示功能上还存在着一些不足: 
    ● 不易完成对XML数据的复杂处理,如将英文字母全部转换为大写,截取指定长度的字符串,忽略一些特定的标点等; 
    ● 不易对XML数据中的数值进行计算; 
    ● 一个XSL通常是静态地作用到一个XML文档上,无法将多个XML文档中的数据用一个XSL合并转换为一个输出结果。 
    使用DOM就能够很好地解决上述问题,而且编写的脚本在服务器端和客户端都能
      

  8.   

    XML DOM介绍和例子
      时间:2000/11/21 09:05 作者:chache CHINAASP 
      1.文档对象模型(DOM)
      DOM是HTML和XML文档的编程基础,它定义了处理执行文档的途径。编程者可以使用DOM增加文档、定位文档结构、填加修改删除文档元素。W3C的重要目标是把利用DOM提供一个使用于多个平台的编程接口。W3C DOM被设计成适合多个平台,可使用任意编程语言实现的方法。
      2.节点接口
      XML parser用来装载XML文档到缓存中,文档装载时,可以使用DOM进行检索和处理。DOM采用树形结构表示XML文档,文档元素是树的最高阶层,该元素有一个或多个孩子节点用来表示树的分枝。
      节点接口程序通常用来读和写XML节点树中的个别元素,文档元素的孩子节点属性可以用来构造个别元素节点。XML parser用来证明Web中的DOM支持遍历节点树的所有函数,并可通过它们访问节点和及其属性、插入删除节点、转换节点树到XML中。
      所有Microsoft XML parser函数得到W3C XML DOM的正式推荐,除了load和loadXML函数(正式的DOM不包括标准函数loading XML文档)。有13个节点类型被Microsoft XML parser支持,下面列出常用节点:
      节点类型例子
      Document type <!DOCTYPE food SYSTEM "food.dtd"> 
      Processing instruction <?xml version="1.0"?> 
      Element <drink type="beer">Carlsberg</drink> 
      Attribute type="beer" 
      Text Carlsberg 
      3.使用XML parser
      为了更加熟练的处理XML文档,必须使用XML parser。Microsoft XML parser是IIS5.0所带的一个COM组件,一旦安装了IIS5.0,parser可以利用HTML文档和ASP文件中的脚本。
      Microsoft XMLDOM parser支持以下编程模式:
      ----支持JavaScript, VBScript, Perl, VB, Java, C++ 等等
      ----支持W3C XML 1.0 和XML DOM 
      ----支持DTD 和validation 
      如果使用IE5.0中的JavaScript,可以使用下面的XML文档对象:
      var xmlDoc = new ActiveXObject("Microsoft.XMLDOM")
      如果使用VBScript,可以使用下面的XML文档对象:
      set xmlDoc = CreateObject("Microsoft.XMLDOM")
      如果使用ASP,可以使用下面的XML文档对象:
      set xmlDoc = Server.CreateObject("Microsoft.XMLDOM")
      4.装载一个XML文件到parser中
      下面的代码装载存在的XML文档进入XML parser:
      <script language="JavaScript">
      var xmlDoc = new ActiveXObject("Microsoft.XMLDOM")
      xmlDoc.async="false"
      xmlDoc.load("note.xml")
      // ....... processing the document goes here
      </script>
      第一行脚本增加了一个Microsoft XML parser实例,第三行装载名为”note.xml”的XML文档进入parser中。第二行保证文档装载完成以后parser进行下一步工作。
      5. parseError对象
      打开XMl文档时,XML Parser产生错误代码,并存在parseError对象中,包括错误代码、错误文本和错误行号,等信息。
      6.文件错误
      下面的例子将试图装载一个不存在的文件,然后产生相应的错误代码:
      var xmlDoc = new ActiveXObject("Microsoft.XMLDOM")
      xmlDoc.async="false"
      xmlDoc.load("ksdjf.xml")
      document.write("<br>Error Code: ")
      document.write(xmlDoc.parseError.errorCode)
      document.write("<br>Error Reason: ")
      document.write(xmlDoc.parseError.reason)
      document.write("<br>Error Line: ")
      document.write(xmlDoc.parseError.line)
      7.XML错误
      下面使用不正确的格式装载XMl文档,
      var xmlDoc = new ActiveXObject("Microsoft.XMLDOM")
      xmlDoc.async="false"
      xmlDoc.load("note_error.xml")
      document.write("<br>Error Code: ")
      document.write(xmlDoc.parseError.errorCode)
      document.write("<br>Error Reason: ")
      document.write(xmlDoc.parseError.reason)
      document.write("<br>Error Line: ")
      document.write(xmlDoc.parseError.line)
      8. parseError属性
      属性描述:
      errorCode 返回长整型错误代码
      reason 返回字符串型错误原因
      line 返回长整型错误行号
      linePos 返回长整型错误行号位置
      srcText 返回字符串型产生错误原因
      url 返回url装载文档指针
      filePos 返回长整型错误文件位置
      9.遍历节点树
      一种通用的析取XML文档的方法是遍历节点树和它的元素值。下面是使用VBScript写的遍历节点树的程序代码:
      set xmlDoc=CreateObject("Microsoft.XMLDOM")
      xmlDoc.async="false"
      xmlDoc.load("note.xml")
      for each x in xmlDoc.documentElement.childNodes
      document.write(x.nodename)
      document.write(": ")
      document.write(x.text)
      next 
      10.为XML文件提供HTML格式
      XML的一个优点是把HTML文档和它的数据分离开。通过使用浏览器中的XML parser,HTML页面可以被构造成静态文档,通过JavaScript提供动态数据。下面的例子使用JavaScript读取XML文档,写XML数据成HTML元素:
      var xmlDoc = new ActiveXObject("Microsoft.XMLDOM")
      xmlDoc.async="false"
      xmlDoc.load("note.xml")
      nodes = xmlDoc.documentElement.childNodes
      to.innerText = nodes.item(0).text
      from .innerText = nodes.item(1).text
      header.innerText = nodes.item(2).text
      body.innerText = nodes.item(3).text
      11.通过名称访问XML元素
      下面的例子使用JavaScript读取XML文档,写XML数据成HTML元素:
      var xmlDoc = new ActiveXObject("Microsoft.XMLDOM")
      xmlDoc.async="false"
      xmlDoc.load("note.xml")
      document.write(xmlDoc.getElementsByTagName("from").item(0).text)
      12.装载纯XML文本进入parser 
      下面的代码装载文本字符串进入XML parser :
      <script language="JavaScript">
      var text="<note>"
      text=text+"<to>Tove</to><from>Jani</from>"
      text=text+"<heading>Reminder</heading>"
      text=text+"<body>Don't forget me this weekend!</body>"
      text=text+"</note>"
      var xmlDoc = new ActiveXObject("Microsoft.XMLDOM")
      xmlDoc.async="false"
      xmlDoc.loadXML(text)
      // ....... processing the document goes here
      </script>
      13.装载XML进入Parser 
      <html>
      <body>
      <script language="javascript">
      var xmlDoc = new ActiveXObject("Microsoft.XMLDOM")
      xmlDoc.async="false"
      xmlDoc.load("note.xml")
      document.write("The first XML element in the file contains: ")
      document.write(xmlDoc.documentElement.childNodes.item(0).text)
      </script>
      </body>
      </html>
      遍历XML节点树:
      <html>
      <body>
      <script language="VBScript">
      txt="<h1>Traversing the node tree</h1>"
      document.write(txt)
      set xmlDoc=CreateObject("Microsoft.XMLDOM")
      xmlDoc.async="false"
      xmlDoc.load("note.xml")
      for each x in xmlDoc.documentElement.childNodes
      document.write("<b>" & x.nodename & "</b>")
      document.write(": ")
      document.write(x.text)
      document.write("<br>")
      next
      </script>
      </body>
      </html>
      装载XML 进入HTML 
      <html>
      <head>
      <script language="JavaScript"
      for="window" event="onload">
      var xmlDoc = new ActiveXObject("Microsoft.XMLDOM")
      xmlDoc.async="false"
      xmlDoc.load("note.xml")
      nodes = xmlDoc.documentElement.childNodes
      to.innerText = nodes.item(0).text
      from.innerText = nodes.item(1).text
      header.innerText = nodes.item(2).text
      body.innerText = nodes.item(3).text
      </script>
      <title>HTML using XML data</title>
      </head>
      <body bgcolor="yellow">
      <h1>Refsnes Data Internal Note</h1>
      <b>To: </b><span id="to"></span>
      <br>
      <b>From: </b><span id="from"></span>
      <hr>
      <b><span id="header"></span></b>
      <hr>
      <span id="body"></span>
      </body>
      </html> (完)