從技術上來說,在ASP環境中,讀入并管理XML文本的主要方法有三種:
創建MSXML對象,并且將XML文檔載入DOM;
使用服務器端嵌入(Server-Side Include,SSI);
就如同訪問其他文本文件一樣,使用FileSystemObject來訪問XML文檔;
第四種方法是在客戶端創建內置的數據島,有關的內容以后講解。
一、使用DOM
為了在ASP代碼中使用DOM,需要創建一個Microsoft XML分析器的實例,它像任何別的COM組件一樣被實例化,在頁面的開始處頊要增加幾行標準代碼。這些代碼創建一個分析器實例,加載XML文檔至DOM,并且將根元素(即文檔元素)設置為當前節點。
‘Instatiate the XML Processor
Set objXML = Server.CreateObject("Microsoft.XMLDOM")
Load the XML Document
objXML.load(Server.MapPath("mydata.xml")
Set the Document Element
Set objRootElement = objXML.documentElement
在XML文檔被加載之前,還需要執行第四步,即設置validateOnParse屬性為True,這可確保被加載的文檔為有效的XML文檔。這可避免后面遇到的各種麻煩:
Instatiate the XML Processor
Set objXML = Server.CreateObject("Microsoft.XMLDOM")
The processos should validate the document
objXML.validateOnParse = True
Load the XML Document
objXML.load(Server.MapPath("mydata.xml")
Set the Document Element
Set objRootElement = objXML.documentElement
最后,還有一個可選步驟,它也是出現在加載之前。它要求同步加載文件:
objXML.async = false
這說時加載并驗證一個相當大的文件需要占用一些時間。另一種替換方案是忽略這一步,允許非同步加載,這是缺省情況,一旦完成這些初始化步驟,XML文檔就被加載,并且做好了被處理的準備。DOM所有重要的功能都是可配置的。
當然,就如同任何COM對象一樣,在使用完之后,請記住必須銷毀它:
Set objXML = nothing
二、服務器端嵌入
服務器端嵌入可用于將XML文檔代碼插入ASP頁面。
三、用ASP代碼處理XML的示例
<HTML>
<HEAD>
</HEAD>
<BODY>
<%
Dim sourceFile,source,rootElement,HTMLCode
sourceFile = Request.ServerVariables("APPL_PHYSICAL_PATH") & "xml\contacts.xml"
set source = Server.CreateObject("Microsoft.XMLDOM")
source.async = false
source.load sourceFile
set rootElement = source.documentElement
HTMLCode = HTMLCode & "<font size=4 face=verdana>"
HTMLCode = HTMLCode & rootElement.childNodes(0).text
HTMLCode = HTMLCode & "</font><p></p><font size=3 face=verdana><I>"
HTMLCode = HTMLCode & rootElement.childNodes(0).text
HTMLCode = HTMLCode & "</I></font><p></p><font size=3 face=verdana>"
HTMLCode = HTMLCode & rootElement.childNodes(0).text
HTMLCode = HTMLCode & "</font><p></p>"
response.write(HTMLCode)
set source = nothing
%>
</BODY>
</HTML>
contacts.xml
<?xml version="1.0" ?>
<CONTACT_INFO>
<CONTACT>
<NAME>JOHN</NAME>
<PHONE>111-1111-111</PHONE>
</CONTACT>
<CONTACT>
<NAME>SMITH</NAME>
<PHONE>222-2222-222</PHONE>
</CONTACT>
<CONTACT>
<NAME>MIKE</NAME>
<PHONE>333-3333-333</PHONE>
</CONTACT>
</CONTACT_INFO>
經XSL格式化的XML數據
styleContact.asp
<HTML>
<BODY>
<%
sourceFile = server.mapPath("contact.xml")
styleFile = server.mapPath("contact.xsl")
set source = Server.CreateObject("Microsoft.XMLDOM")
source.async = False
source.load(sourceFile)
set style = Server.CreateObject("Microsoft.XMLDOM")
style.async = False
style.load(styleFile)
response.write(source.transformNode(style))
%>
</BODY>
</HTML>
contact.xml
<?xml version="1.0" ?>
<?xml-stylesheet type="text/xsl" href="contact.xsl" ?>
<CONTACT_INFO>
<CONTACT>
<NAME>ZHOU.ZF</NAME>
<PHONE>11111111111</PHONE>
</CONTACT>
<CONTACT>
<NAME>LISTEN</NAME>
<PHONE>22222222222</PHONE>
</CONTACT>
<CONTACT>
<NAME>BUBU</NAME>
<PHONE>33333333333</PHONE>
</CONTACT>
</CONTACT_INFO>
contact.xsl
<?xml version="1.0" ?>
<xsl:template xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<HTML>
<BODY>
<xsl:for-each select="CONTACT_INFO/CONTACT">
<DIV>
<xsl:value-of select="NAME"/>
</DIV>
</xsl:for-each>
</BODY>
</HTML>
</xsl:template>
其它示例:
1、WEB鏈接
<HTML>
<BODY>
<%
Dim objXML, objRootElement, strLinkName, strLinkURL, strLinkTarget, sourceFile, i
sourceFile = Request.ServerVariables("APPL_PHYSICAL_PATH") & "xml\Links.xml"
set objXML = Server.CreateObject("Microsoft.XMLDOM")
objXML.validateOnParse = True
objXML.async = false
objXML.load(sourceFile)
set objRootElement = objXML.documentElement
for i = 0 to objRootElement.childNodes.length-1
strLinkName = objRootElement.childNodes.item(i).text
strLinkURL = objRootElement.childNodes.item(i).getAttribute("url")
strLinkTarget = objRootElement.childNodes.item(i).getAttribute("target")
response.write("<a href=" & strLinkURL & " target=" & strLinkTarget & ">" & strLinkName & "</a><br>")
next
set objXML = nothing
%>
</BODY>
</HTML>
Links.xml
<?xml version="1.0" ?>
<relatedlinks>
<link url="default0.asp" target="_blank">Front Page 0</link>
<link url="default1.asp" target="_blank">Front Page 1</link>
<link url="default2.asp" target="_blank">Front Page 2</link>
<link url="default3.asp" target="_blank">Front Page 3</link>
</relatedlinks>
2、XML文件的生成
gen_xml.asp
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Developer Studio">
<META HTTP-EQUIV="Content-Type" content="text/html; charset=iso-8859-1">
<TITLE>Generate XML</TITLE>
</HEAD>
<BODY>
<%
Create an empty root node for the document.
Set rootNode = Server.CreateObject("AspXml.AspXml")
rootNode.Encoding = "ISO-8859-1"
rootNode.Standalone = "yes"
rootNode.Tag = "table"
for row = 1 to 10
Set rowNode = rootNode.NewChild("row","")
for col = 1 to 10
Set colNode = rowNode.NewChild("column","("&col&","&row&")")
next
next
rootNode.SaveXml(Server.MapPath("table.xml"))
Set rootNode = Nothing
%>
</BODY>
</HTML>
3、向XML文件中追加結點
addItem.asp
<%
If request.ServerVariables("REQUEST_METHOD")="POST" Then
call writeXML
Else
call showForm
End If
Sub showForm
%>
<html>
<body>
Please enter the persons contact details
<form action="addItem.asp" method="post">
Name: <input type="text" name="name"> Email: <input type="text" name="email">
<input type="submit" name="submit" value="Add">
</form>
</body>
</html>
<%
End Sub
Sub writeXML
find xml file path
Dim strFilename,strXMLFile
strFilename = "contacts.xml"
strXMLFile=server.mapPath(strFilename)
standard "create xml object" code
set oXML = server.createObject("Microsoft.XMLDOM")
oXML.async = False
check file exists
bitFileExists = oXML.load(strXMLFile)
If bitFileExists Then
tmpChildnodes = oXML.documentElement.childnodes.length - 1
intCurrentRecord = tmpChildnodes + 1
Else
create xml
oXML.appendChild(oXML.createProcessingInstruction("xml","version=""1.0"""))
oXML.appendChild(oXML.createElement("contacts"))
intCurrentRecord = 0
End If
create record
set oXMLRec = oXML.createElement("contact")
Create an id attribute
Set oAtt = oXML.createAttribute("id")
oAtt.Text = intCurrentRecord
oXMLRec.setAttributeNode oAtt
set remaining fields
name
oXMLRec.appendChild(oXML.createElement("name"))
oXMLRec.childnodes(0).text = request.form("name")
email address
oXMLRec.appendChild(oXML.createElement("email"))
oXMLRec.childnodes(1).text = request.Form("email")
date stamp
oXMLRec.appendChild(oXML.createElement("created"))
oXMLRec.childnodes(2).text = now()
write new record
oXML.documentElement.appendChild(oXMLRec.cloneNode(True))
save file
oXML.save strXMLFile
redirect to xml file
response.redirect(strFilename)
oXML = nothing
End Sub
%>
contacts.xml
<?xml version="1.0"?>
<CONTACT_INFO>
<contact id="1">
<name>bubu</name>
<email>[email protected]</email>
<created>2003/04/29 9:26:51</created>
</contact>
<contact id="2">
<name>22222</name>
<email>222222222</email>
<created>2003-5-12 18:15:41</created>
</contact>
</CONTACT_INFO>
4、留言薄
<%
username=request.form("username")
if username<>"" then
fromwhere =request.form("fromwhere")
homepage =request.form("homepage")
email =request.form("email")
text =Server.URLEncode(request.form("text"))
Posttime =now()
sourceFile = "list.xml"
strSourceFile = Server.MapPath(sourceFile)
Set objXML = Server.CreateObject("Microsoft.XMLDOM")
blnRet = objXML.load(strSourceFile)
If blnRet Then
Set objRootlist = objXML.documentElement
if objRootlist.hasChildNodes then
id = objRootlist.lastchild.firstchild.text+1
else
id=1
end if
Else
objXML.appendChild(objXML.createProcessingInstruction("xml","version=""1.0"""))
set objRootlist = objXML.createElement("NewList")
objXML.appendChild(objRootlist)
id = 1
End If
brstr=chr(13)&chr(10)&chr(9)
XMLnode=brstr&"<list>"&brstr & _
"<id>"&id&"</id>"&brstr & _
"<username>"&username&"</username>"&brstr & _
"<fromwhere>"&fromwhere&"</fromwhere>"&brstr & _
"<Posttime>"&Posttime&"</Posttime>"&brstr & _
"<homepage>"&homepage&"</homepage>"&brstr & _
"<email>"&email&"</email>"&brstr & _
"<text>"&text&"</text>"&brstr & _
"</list>"&chr(13)
set objXML2=Server.CreateObject("Microsoft.XMLDOM")
objXML2.loadXML(XMLnode)
set rootNewNode=objXML2.documentElement
objRootlist.appendChild(rootNewNode)
objXML.save(strSourceFile)
set objXML=nothing
set objXML2=nothing
response.redirect(strSourceFile)
end if
%>
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<style type="text/css">
<!--
td { font-size: 9pt}
-->
</style>
</head>
<body bgcolor="#0099CC" text="#000000">
<table width="80%" border="0" cellspacing="1" cellpadding="4" align="center" bgcolor="#FFFFFF">
<form action="PostNew.asp" method="post" name="form1">
<tr bgcolor="#000000">
<td colspan="2"><font color="#FFFFFF">New Book</font></td>
</tr>
<tr bgcolor="#EFEFEF">
<td width="19%" align="right">Name:</td>
<td width="81%">
<input type="text" name="username">**
</td>
</tr>
<tr bgcolor="#EFEFEF">
<td width="19%" align="right">ComeFrom:</td>
<td width="81%">
<input type="text" name="fromwhere" value="China">
</td>
</tr>
<tr bgcolor="#EFEFEF">
<td width="19%" align="right">WebSite:</td>
<td width="81%">
<input type="text" name="homepage" value="http://">
</td>
</tr>
<tr bgcolor="#EFEFEF">
<td width="19%" align="right">Email:</td>
<td width="81%">
<input type="text" name="email">
</td>
</tr>
<tr bgcolor="#EFEFEF">
<td width="19%" align="right" valign="top">Context:</td>
<td width="81%">
<textarea name="text" cols="60" rows="10"></textarea>
</td>
</tr>
<tr bgcolor="#EFEFEF">
<td width="19%" align="right"> </td>
<td width="81%">
<input type="submit" name="Submit" value="Submit">
<input type="reset" name="Submit2" value="Reset">
</td>
</tr>
</form>
</table>
</body>
</html>
四、使用DOM生成XML總結
了解XML文檔對象模型
XML DOM包含四個主要對象:XMLDOMDocument, XMLDOMNode,XMLDOMNodeList和XMLDOMNamedNodeMap。同任何其它對象模型一樣,每個XML DOM對象有其自己的特性和方法。本文,我們將主要介紹XMLDOMDocument 和XMLDOMNode 對象。
XMLDOMDocument對象
XMLDOMDocument對象代表XML DOM層次中的頂層結點(請不要同XML文檔中的根結點混淆)。它是建立和操縱XML結構的基礎。為了創建XMLDOMDocument對象變量,請使用如下的CreateObject 命令:
Set objXMLdoc = CreateObject("Microsoft.XMLDOM")
表A:列出了在創建了XMLDOMDocument的對象后,我們可以得到的一些特性和方法。
方法 描述
CreateAttribute 創建新屬性
CreateCDATASection 創建DATA 部分結點
CreateComment 創建注釋結點
CreateElement 使用指定名稱創建元素結點
CreateEntityReference 創建實體參考對象
CreateNode 創建結點
CreateTextNode 創建文本結點
Load 載入已有的 XML 文檔
Save 保存XML 文檔
特性 描述
PreserveWhiteSpace 指示是否在XML文檔中顯示空格t
ResolveExternals 解析名域,DTD和外部實體索引
ValidateOnParse 指示解析器是否對文檔進行合法性檢查
DocumentElement 返回XML 文檔的根結點
設置運行選項
正如你在表A中所看到的,只有創建了XMLDOMDocument 對象,你才可創建單個的XML結點。在做這個工作之前,你還可以設置XML文檔的解析運行條件,如果你打算直接生成XML文檔到瀏覽器時,就很有用處。
運行選項可以讓你設置異步下載,提供文檔合法性檢查和保留空格,以及解析外部索引。為了防止異步下載,可設置asynch特性為False。如果打算用一行新字符代替空格,可設置PreserveWhiteSpace 特性為True。 ResolveExternals特性可防止解析引擎解析外部實體索引,文檔類型定義或者外部名域。
1、創建結點
XMLDOMDocument 對象提供了創建結點或者XMLDOMNode的兩種方法: CreateElement 和CreateNode。選擇其中哪一種方法,取決于你需要結點提供信息量的多少。當你使用CreateElement 方法時,只要提供結點名稱,如
Set objXMLroot = objXMLdoc.CreateElement("ORDER_STATUS")
當使用CreateNode 方法時,你要指定結點類型,結點名稱和相關名域。(XML名域可以讓你擇同一文檔中用同一名稱創建多個XML元素) 例如,如果要使用CreateNode方法,你可寫出如下代碼:
Set objXMLroot = objXMLdoc.createNode("element","ORDER_STATUS","Space1")
一旦創建了結點,你須把它添加進XML文檔中。這就要用AppendChild 方法,例如,繼續上面的例子,你可以寫出:
objXMLdoc.AppendChild(objXMLroot)
該語句創建了XML根結點。
除了AppendChild方法外,XMLDOMNode 對象也具有其它三個控制XML結點的方法: ReplaceChild, RemoveChild和InsertBefore
2、對結點的屬性賦值
一旦創建了結點,還要對其屬性賦值,如獨立的標識符,或者特性值。你要用到SetAttribute方法。該方法接收兩個參數— 屬性名和屬性值。例如,下列代碼創建了屬性名SHIPPING_DATASOURCE 和屬性值NORTH_ATLANTIC_SHIPPING:
objXMLroot.SetAttribute "SHIPPING_DATASOURCE","NORTH_ATLANTIC_SHIPPING"
此時,我們生成了一個XML文檔,SetAttributes方法創建了結點屬性 。
3、加入子結點
要創建子結點,你可以使用我們前面介紹的CreateElement或者 CreateNode 方法,然后把它們添加到合適的父母結點中。例如,假設,我們要創建稱為PUBLISHER_DISCLAIMER的XML結點。為了做到這一點,我們把該結點附加到文檔的根結點中,代碼如下:
Set objXMLChildTestNode = objXMLdoc.createNode("element","PUBLISHER_DISCLAIMER","")
objXMLdoc.DocumentElement.appendChild(objXMLChildTestNode)
注意:我們使用了XMLDOMDocument的 DocumentElement 特性來把新結點添加到XML文檔的根結點中,要添加子結點,你只需把它們添加到父母結點中。
4、給結點賦值
一旦創建完所有的結點,你將需要給它們賦值。那是XML最關鍵的步驟。要做到這點,你同平常一樣,創建一個結點,然后對該結點的TEXT屬性賦值。
ASP XML編程objXML.async = False
2019-09-19 11:49asp教程網 ASP教程
XML數據組合進ASP應用程序的時候,需要做的第一件事是訪問XML文件的內容。
延伸 · 閱讀
- 2022-03-08Spring中的使用@Async異步調用方法
- 2022-03-07C#操作XML文件步驟
- 2022-03-07Spring Xml裝配Bean的思路詳解
- 2022-03-02C#使用XmlDocument或XDocument創建xml文件
- 2022-02-22C#實現XML文件讀取
- 2022-02-22SpringBoot使用Async注解失效原因分析及解決(spring異
精彩推薦
- ASP教程
asp Access數據備份,還原,壓縮類代碼
asp Access數據備份,還原,壓縮類實現代碼,大家可以參考下。...
- ASP教程
asp 標記字符串中指定字符變色不區分大小寫
今天遇到這種問題,單純的使用replace函數不行,他會改變原有的字符串的大小寫,在網上找到相關的代碼,自己備份下...
- ASP教程
asp 采集實戰代碼
最近實在是太流行采集了,本人是不喜歡采集的,但對采集的原理我卻很有興趣進行研究,拿到了網上采集常用函數,對其進行了一番研究,并實戰,結果...
- ASP教程
asp+javascript實現404頁的處理轉換
asp+javascript實現404頁的處理轉換...
- ASP教程
ASP常用函數:getpy()
ASP常用函數:getpy()...
- ASP教程
asp之基于adodb.stream的文件操作類
asp之基于adodb.stream的文件操作類...
- ASP教程
ASP.NET 數據源
數據源 一個 data sourse 控件與數據綁定的控件相互作用,并隱藏了復雜的數據的聯編過程。這些是提供數據給 data bound 控件的工具,并且支持如插入,刪除...
- ASP教程
JScript中遍歷Request表單參數集合的方法
這篇文章主要介紹了JScript中遍歷Request表單參數集合的方法,本文以遍歷Request.QueryString集合為例給出了實現代碼,需要的朋友可以參考下...