My FAQ,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > Web开发 > Asp > 应用范列
将SAX加入我们的ASP应用中
作者:hydnoahark 时间:2001-11-11 11:01 出处:互联网 责编:MyFAQ
              摘要:将SAX加入我们的ASP应用中

在处理大型的XML文档的时候,在服务器端直接使用XML DOM的时候速度是比较慢的,当我第一次接触到SAX的时候,我意识到我们应该在服务器端将DOM和SAX结合起来以提高我们程序的效率。我们在ASP中最常使用的就是使用COM来完成这个工作(也许你有更好的方法)。

废话少说,还是直接进入实际的代码部分了(下面只是包含了最基本的代码而已)。

首先我们创建一个DLL来封装SAX的功能好了。
测试环境:Win2k Prof.+MSXML3.0 sp1+VB6
要使用SAX我们必须引用(Reference)Microsoft XML 3.0(我的机器安装的是MSXML3.0 sp1)

工程名:SAXTesting

类名:clsSAXTest
方法:Public Function MyXMLParser(XML文件物理路径) as DOMDocument
代码:
Option Explicit


Public Function MyXMLParser(ByVal strXMLFilePath As Variant) As DOMDocument
    Dim reader As New SAXXMLReader
    Dim contentHandler As New ContentHandlerImpl
    Dim errorHandler As New ErrorHandlerImpl
   
   
    Set reader.contentHandler = contentHandler
    Set reader.errorHandler = errorHandler
    On Error GoTo ErrorHandle
    Dim XMLFile As String
    XMLFile = strXMLFilePath
    reader.parseURL (XMLFile)
   
    Dim xmlDoc As MSXML2.DOMDocument
    Set xmlDoc = CreateObject("MSXML2.DOMDocument")
    xmlDoc.loadXML strXML
    Set MyXMLParser = xmlDoc
    Set xmlDoc = Nothing
    Exit Function
   
ErrorHandle:
    Err.Raise 9999, "My XML Parser", Err.Number & " : " & Err.Description

End Function

类名:modPublic
代码:
Option Explicit

Global strXML As String

类名:ContentHandlerImpl
代码:
Option Explicit

Implements IVBSAXContentHandler


Private Sub IVBSAXContentHandler_startElement(strNamespaceURI As String, strLocalName As String,

strQName As String, ByVal attributes As MSXML2.IVBSAXAttributes)
   
    Dim i As Integer
   
    intLocker = intLocker + 1
    If intLocker > 1 Then
       
    End If
    strXML = strXML & "<" & strLocalName
  
    For i = 0 To (attributes.length - 1)
        strXML = strXML & " " & attributes.getLocalName(i) & "=""" & attributes.getValue(i) &

""""
    Next

    strXML = strXML & ">"
   
    If strLocalName = "qu" Then
        Err.Raise vbObjectError + 1, "ContentHandler.startElement", "Found element <qu>"
    End If

End Sub

Private Sub IVBSAXContentHandler_endElement(strNamespaceURI As String, strLocalName As String,

strQName As String)
   
    strXML = strXML & "</" & strLocalName & ">"
   
End Sub

Private Sub IVBSAXContentHandler_characters(text As String)
    text = Replace(text, vbLf, vbCrLf)
    strXML = strXML & text
   
End Sub

Private Property Set IVBSAXContentHandler_documentLocator(ByVal RHS As MSXML2.IVBSAXLocator)

End Property

Private Sub IVBSAXContentHandler_endDocument()

End Sub

Private Sub IVBSAXContentHandler_endPrefixMapping(strPrefix As String)

End Sub

Private Sub IVBSAXContentHandler_ignorableWhitespace(strChars As String)

End Sub

Private Sub IVBSAXContentHandler_processingInstruction(target As String, data As String)
   
    strXML = strXML & "<?" & target & " " & data & ">"

End Sub

Private Sub IVBSAXContentHandler_skippedEntity(strName As String)

End Sub

Private Sub IVBSAXContentHandler_startDocument()

End Sub

Private Sub IVBSAXContentHandler_startPrefixMapping(strPrefix As String, strURI As String)

End Sub


类名:ErrorHandlerImpl
代码:
Option Explicit

Implements IVBSAXErrorHandler


Private Sub IVBSAXErrorHandler_fatalError(ByVal lctr As IVBSAXLocator, msg As String, ByVal

errCode As Long)
       
        strXML = strXML & "*** error *** " & msg
   
End Sub

Private Sub IVBSAXErrorHandler_error(ByVal lctr As IVBSAXLocator, msg As String, ByVal errCode As

Long)
   
End Sub

Private Sub IVBSAXErrorHandler_ignorableWarning(ByVal oLocator As MSXML2.IVBSAXLocator,

strErrorMessage As String, ByVal nErrorCode As Long)

End Sub


OK,让我们编译这个DLL,应该是没什么问题了。让我们在ASP中看看运行的结果怎么样:
XML文件:
<?xml version="1.0"?>
<root foo="bar.com">
<PARTS>
   <PART foo="bar.com"  foo2="bar.com">
 <PARTNO>12345</PARTNO>
 <DESCRIPTION>VIP - Very Important Part</DESCRIPTION>
   </PART>
   <PART>
 <PARTNO>5678</PARTNO>
 <DESCRIPTION>LIP - Less Important Part</DESCRIPTION>
   </PART>
</PARTS>
</root>

ASP文件:
<%
Set a = CreateObject("SAXTesting.clsSAXTest")
Set xmlDoc = a.MyXMLParser("D:\test.xml")
Response.contenttype="text/xml"
response.write xmlDoc.xml
set xmlDoc=nothing
set a=nothing
%>

看看结果:-)

 

关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 myfaq.com.cn All rights reserved. www.myfaq.com.cn 版权所有