精华区 [关闭][返回]

当前位置:月光软件>>讨论区精华>>〖软件开发〗>>● ASP>>★ASP的应用★>>Server-Side XML in ASP

主题:Server-Side XML in ASP
发信人: dongbao()
整理人: netyum(2002-07-23 19:01:35), 站内信件
Server-Side XML in ASP
By Adam S. Cartwright 

Introduction(简介)
随着免费的IE5的发布,在WEB应用中使用XML将更加容易。这里我介绍一些有关在
ASP应用程序中使用升级后的XML的文档对象模型(DOM)所产生的魔力。
The Need
在服务器端使用XML让开发者有了一个全新的开发功能的天地。当我们不断地提高
使用XML的无限扩展能力的时候,我们也需要基础才能熟练地在服务器端操作XML
。为了能够示范怎样在ASP中使用XML,我使用了《the Scripting News》,里的代
码版本,请参考以下站点(www.scripting.com)。以下,我将介绍怎样用简单的
ASP来显示《the Scripting News》的发行时间以及它内包含的大标题的数量,然
后我将显示所有的大标题机及其相关连接。
The Document Object Model(文档对象模型DOM) 
在IE5中,升级后的DOM完全支持和W3C所推荐的Document Object Model Core (L
evel 1)中所表达的调试(programming)界面。而且它还包含了很多方法来支持
相关的XML技术,如XSL,XSL匹配模式、命名空间(NAMESPACES)、数据类型以及
schemas等等。
.W3C推荐了两组的DOM programming interfaces。首先是定义了编写使用了XML的
应用程序的界面。其次是定义了使开发者更容易地使用XML的界面。第二组界面是
用于方便开发者的,但并不是必须的。
在ASP应用程序中使用DOM是一件非常简单的事,但是需要在SERVER端本身也安装
了IE5。IE5的安装过程将决定其所能支持的XML的功能强弱。只要安装了IE5后,
你只要用下面的语句就可以在ASP中使用XML DOM。
<% Set objXML = Server.CreateObject("Microsoft.XMLDOM") %>
XML on the Server(server端的XML)
一旦你创建了DOM对象实例后,你就可以建立起你自己的XML文档或装入现有的文
档。在装入文档时,你可以选择其中的XML文本中的字符传、打开XML文档或者是
装载其中一部分内容。。 在我的例子中,假设我们的服务器上存有一份最近的S
cripting News XML文档的代码。在装载文档之前,你要设DOM对象的异步属性的
值为“FALSE”。这以为着要DOM不要以异步的方式来下载XML文档。这点很重要的
,下载了文档后,我们开始使用它的内容。要是没有下载到它的内容,当我们访
问它的时候就会报错。
<%
Set objXML = Server.CreateObject("Microsoft.XMLDOM")
objXML.async = False
objXML.Load (Server.MapPath("mostRecentScriptingNews.xml"))
%>
Let Us look at the actual XML document that we are loading: 
让我们看看我们要下载的文档呢:
<?xml version="1.0"?>
<!DOCTYPE scriptingNews SYSTEM
"http://www.scripting.com/dtd/scriptingNews.dtd">
<scriptingNews>
   <header>
     <copyright>Copyright 1997-1999 UserLand Software, Inc.
     </copyright>
     <scriptingNewsVersion>1.0</scriptingNewsVersion>
     <pubDate>Wed, 03 Mar 1999 08:00:00 GMT</pubDate>
     <lastBuildDate>Thu, 04 Mar 1999 03:37:03 GMT</lastBuildDate>
   </header>
   <item>
     <text>Wired: A Linux Car Stereo! Wow.</text>
     <link>
       <url>http://www.wired.com/news/news/technology/ ?
            story/18236.html
       </url>
       <linetext>A Linux Car Stereo</linetext> 
     </link>
   </item>
   ?
   <item>
     <text>According to News.com, Hewlett-Packard will offer
           customers storage and computing on a rental basis.
     </text>
     <link>
       <url>http://www.news.com/News/Item/ ?
            0,4,33202,00.html?st.ne.fd.mdh
       </url>
       <linetext>According to News.com</linetext>
     </link>
   </item>
</scriptingNews>
DOM包含了错误对象,用它你可以访问到最近的错误信息。这个对象对于你在ASP
中调试和错误陷阱非常有帮助。
<%
If objXML.parseError.errorCode <> 0 Then
     handle the error
End If
%>
所幸,我们可以从中得到许多有价值的错误信息,以下一些有关的属性的表达式

Property  Description  
errorCode  The error code  
filepos  The absolute file position in the XML document containing the
 error  
Line  The line number in the XML document where the error occurred  
linepos  The character position in the line containing the error  
reason  The cause of the error  
srcText  The data where the error occurred 
URL  The URL of the XML document containing the error  
在我们的例子(Scripting News)中,这个错误对象向我们展示了XML文档提及的
DTD文件。在装载XML文档后检查错误对象是一个好的方法。
既然我们建立了一个有效的的使用DOM对象的文档,让我们看一下文档里有什么。
DOM揭示了许多有用的方法来确定在XML文档中的内容。因为DOM解释了文档中的嵌
套节点的树型结构。我们可以使用TagName方法来获取文档中的节点和其他元素。

我们的第一个目标是发现我们的copy of Scripting News.的发行数据。从上面的
DTD的例子中,我们知道这个信息是存储在pubDate节点中的。一个获取这个节点
内容的简单方法就是先创建一个包含所有XML文挡中的节点的对象集合,然后循环
找出这个节点。由于DTD表明了pubDate节点不包含任何的子节点,所以我们可以
用文本属性很快地得到这个节点的内容。请参阅:

<%
Set objXML = Server.CreateObject("Microsoft.XMLDOM")
Set objLst = Server.CreateObject("Microsoft.XMLDOM")
objXML.async = False
objXML.Load (Server.MapPath("mostRecentScriptingNews.xml"))
If objXML.parseError.errorCode <> 0 Then
     handle the error
End If

Set objLst = objXML.getElementsByTagName("*")

For i = 0 to (objLst.length ?1)

    If objLst.item(i).nodeName = "pubDate" Then
      StrDate = objLst.item(i).text
      Exit For
    End If

Next
%>

注意:以上例子我们使用了getElementsByTagName.方法,这个方法返回一个包含
XML文挡中所有元素或节点的集合。我们有了DTD并能获得pubDate节点的准确位置
,因此我们就能用它在集合中的序列号直接访问它。以上文档中使用的循环对于
节点集合的确是一种行之有效的方法,
既然我们已经获得了出版数据,就让我们看看怎样得到文档中的大标题的数目。
我们要从DTD中获得有关的知识,还要从储存在pubDate节点中获取大标题的数目
。我门可以用另一个循环,就想我们刚才做的那样。然后在每次循环对计数器加
一来获取数目。然而有个更好的方法来得到这个信息就是使用DOM中的其他方法。

在下面的例子中,我们所有的事仅仅是创建一个包含所有的节点的对象集合。然
后使用LENGTH属性就可以知道这个节点的数目了,也就是说,获得这个文档中的
大标题数目。请看。
<%
Set objLst = objXML.getElementsByTagName("item")
strNoOfHeadlines = objLst.Length
%>
多数情况下,我们将信息显示在ASP页面上,下面这个例子就表明了怎样用循环在
ASP页面上列出大标题和他们的URL地址。
<%
Set objXML = Server.CreateObject("Microsoft.XMLDOM")
Set objLst = Server.CreateObject("Microsoft.XMLDOM")
Set objHdl = Server.CreateObject("Microsoft.XMLDOM")

objXML.async = False
objXML.Load (Server.MapPath("mostRecentScriptingNews.xml"))

If objXML.parseError.errorCode <> 0 Then
     handle the error
End If

Set objLst = objXML.getElementsByTagName("item")

noOfHeadlines = objLst.length
%>

<HTML><BODY>
<H1>Scripting News Headlines</H1>

<%
For i = 0 To (noOfHeadlines ?1)

Set objHdl = objLst.item(i)

Response.Write("<a href=""" & _
objHdl.childNodes(1).childNodes(0).text & _
""">" & objHdl.childNodes(0).text & _
                  "<br>")

Next
%>

</BODY></HTML>
Conclusion(总结)
这里我们介绍了一些有关XML文档的结构以及DOM对象的魔力的信息,你从中可以
了解到:在ASP文档中很容易使用XML且能够随心所欲地发送信息到你的客户端。

下次,我将介绍怎样在SERVER端使用XSL来在客户端显示复杂的XML文档。



--
ICQ:43395237 OICQ:126132  
我自豪我用正版,我骄傲我用盗版!!! 

※ 来源:.月光程序代码网 http://www.moon-soft.com.[FROM: 211.101.144.65]

[关闭][返回]






转载请注明:转载自 月光程序代码网 [ http://www.moon-soft.com ]