ASP+XML

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

xml常规应用之asp读写文档
本站整理网络搜集 2008-07-07 点击:75 字体:大中小我要评论
xml
一个简单的新闻发布系统的说起:
首先,我们建立一个XML文档,命名为nnDB.xml:
---------------------------------------nnDB.xml---------------------------------------
<?xml version="1.0" encoding="GB2312"?>
<data><news></news></data>
---------------------------------------nnDB.xml---------------------------------------
接着,做一个发布的页面,这个发布页面连带了有新闻的显示列表,把他命名为post.asp 吧!
---------------------------------------post.asp---------------------------------------
<style>
#news_list { width: 430px; float: left; border: 1px solid #CFCFCF; }
#tt { width: 300px; float: left; border-top: 2px solid #CFCFCF; }
#pt { width: 129px; float: right; border-top: 2px solid #CFCFCF; }
#ct { width: 430px; float: left; border-top: 1px solid #CFCFCF; }
#news_list li span { font-size: 12px; letter-spacing: 1px; font-family: Tahoma; }
#c1 { width: 40px; float: left; padding: 5px 0px 5px 0px; background-color: #EFEFEF; font-weight: bold; color: #666; text-align: center; border: 1px solid
#FFF; }
#c2 { float: left; padding: 5px; font-size: 12px; color: #333; text-align: center; letter-spacing: 1px; border: 1px solid #FFF; }
#c3 { width: 380px; float: right; margin: 0px 5px 0px 5px; padding: 3px 0px 3px 0px; text-align: right; color: #CCC; border-top: 1px dotted #CFCFCF; } </style>
<%
Set XMLOBJ = Server.CreateObject("Microsoft.XMLDOM")
XMLOBJ.async = False
XMLOBJ.load Server.MapPath("nnDB.xml")
Set news_root = XMLOBJ.documentElement.selectSingleNode("news")
news_count = news_root.childNodes.length
HTML_CODE = "<div id=""news_list"">"
for i = 0 to news_count - 1
Set temp_news = news_root.childNodes.item(i).childNodes
HTML_CODE = HTML_CODE & "<li id=""tt""><span id=""c1"">标题</span><span id=""c2"">" & temp_news.item(3).text & "</span></li><li
id=""pt""><span id=""c1"">作者</span><span id=""c2"">" &
temp_news.item(4).text & "</span></li>"
HTML_CODE = HTML_CODE & "<li id=""ct""><span id=""c1"">内
容</span><span id=""c2"">" & temp_news.item(5).text & "</span><span
id=""c3"">发表时间:" & temp_news.item(2).text & "点击量:" &
temp_news.item(6).text & "</span></li>"
next
HTML_CODE = HTML_CODE & "</div>"
Response.write HTML_CODE
%>
<form id="form1" name="form1" method="post" action="save_DB.asp"> <p>新闻标题:<input type="text" name="tt" /></p>
<p>新闻作者:<input type="text" name="pt" /></p>
<p>新闻内容:<textarea name="ct" cols="50"
rows="12"></textarea></p>
<p><input type="submit" name="Submit" value="提交" /><input
type="reset" name="Submit2" value="重置" /></p>
</form>
---------------------------------------post.asp---------------------------------------
最后就是save_DB.asp,写入XML的页面:
---------------------------------------save_DB.asp---------------------------------------
<%
' tt 作者pt 发布人ct 新闻内容
tt = trim(Request.Form("tt")) ' trim 去空格
pt = trim(Request.Form("pt"))
ct = trim(Request.Form("ct"))
time_now = now()
' 抓时间,作为新闻条目的区别检索
D_y = year(time_now)
D_m = month(time_now)
D_d = day(time_now)
D_hr = hour(time_now)
D_mi = minute(time_now)
D_se = second(time_now)
' PS:为何要用日期时间做新闻区别呢?我们假设,这个发布后台,只有你一个人可以访问,那么可以肯定一样东西:同一时间内,只可能发布一篇文章。

' 当然,网站平台是面向多用户,如何制作更科学合理的数据索引呢?嗯,大家有兴趣,我日后再单独分类讨论。

暂时就用这个吧!
idx = D_y & D_m & D_d & D_hr & D_mi & D_se
' 中间的检查和判断,我就此跳过,直接看写入XML文档。

if tt = "" or pt = "" or ct = "" then
msg = "新闻标题、发布人和内容为必填项目。

"
Response.Write "<script>alert(""" & msg & "\n\n页面将自动返回..."");window.location = 'post.asp';</script>"
else
SourceFile = Server.MapPath("nnDB.xml")
Set objXML = Server.CreateObject("Microsoft.XMLDOM")
objXML.load(SourceFile)
If objXML.parseError.ErrorCode <> 0 Then
objXML.loadXML "<?xml version=""1.0""
encoding=""GB2312""?><data><news></news></data>"
End If
Set objRootlist = objXML.documentElement.selectSingleNode("news")
If objRootlist.hasChildNodes then
id = stChild.firstChild.text + 1
Else
id=1
End If
Set oListNode =
objXML.documentElement.selectSingleNode("news").AppendChild(objXML.cre ateElement("item"))
Set oDetailsNode =
oListNode.appendChild(objXML.createElement("id"))
oDetailsNode.Text = id
Set oDetailsNode =
oListNode.appendChild(objXML.createElement("index"))
oDetailsNode.Text = idx
Set oDetailsNode =
oListNode.appendChild(objXML.createElement("time"))
oDetailsNode.Text = time_now
Set oDetailsNode =
oListNode.appendChild(objXML.createElement("title"))
oDetailsNode.Text = tt
Set oDetailsNode =
oListNode.appendChild(objXML.createElement("poster"))
oDetailsNode.Text = pt
Set oDetailsNode =
oListNode.appendChild(objXML.createElement("content"))
oDetailsNode.Text = objXML.createCDATASection(ct).text
Set oDetailsNode =
oListNode.appendChild(objXML.createElement("hit"))
oDetailsNode.Text = 0
objXML.save(SourceFile)
Set objXML = nothing
msg = "新闻信息成功已写入。

"
Response.Write "<script>alert(""" & msg & "\n\n页面将自动返回..."");window.location = 'post.asp';</script>"
end if
%>
---------------------------------------save_DB.asp---------------------------------------
好,至此,三页文件,基本完成。

一个小型发布系统基本成型了,在这个基础上,可以开发出很多东西,简单的如留言本等等。

简单的说明一下:
在post.asp页面内,style部分,就是制定新闻列表的CSS样式表,大家不需要把注意力放在上面。

接着就是建立dom对象,然后读取文件。

后半段,是一个输入表单。

今天的重点是:save_DB.asp。

首先是objXML.loadXML "<?xml version=""1.0""
encoding=""GB2312""?><data><news></news></data>",这里是选择读取XML文档<data><news>开始到</news></data>结束,中间这部分的元素,应该很容易理解。

接着,我们再单独读取news标记下的所有元素,并返回第一个元素。

.hasChildNodes
方法是用来检查,选定的节点下是否存在子节点。

是,则根据最后一个<item>节点内的第一个节点的值,+1,形成新新闻的表内索引号。

否则,则表示这个节点内没有任何子节点,那么表内索引自然从1开始。

这个做法是不是科学,我们暂且不做详细的讨论,和新闻数据的索引,作为日后讨论的重点(个人认为,这并不是最好的做法,有一些严重的漏洞。

)。

然后,就到重头戏了。

Set oListNode =
objXML.documentElement.selectSingleNode("news").AppendChild(objXML.cre ateElement("item")),这里实际包含了两步的操作,首先从根节点新创建一个节点,接着同时创建一个名为item的元素,成为该节点……为什么?呃……能不能不说啊……然后依次创建item节点下的子节点,及节点中的内容。

最后写入XML文档,于此,已完成一个简单的写入。

值得讨论的地方不多,不过下面贴一些DOM的对象和方法的简略说明,知道一下就可以了。

documentElement 属性确认XML 文件的根(Root)节点。

selectSingleNode 传回第一个符合样式的节点。

loadXML 方法加载一个XML 文件或字符串的片断。

haschildnodes 方法如果指定的节点有一个或更多子节点,传回值为true。

createElement 方法建立一个指定名称的元素。

AppendChild 方法加上一个节点当作指定节点最后的子节点。

createCDATASection 方法建立一个包含特定数据的CDATA。

将XML数据组合进ASP应用程序的时候,需要做的第一件事是访问XML文件的内容。

从技术上来说,在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_PA TH") & "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="/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="GENERA TOR" 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>zhou813@</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 = stchild.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属性赋值。

例如,下列代码创建了称为PUBLISHED_DATE的XML 结点,然后赋值如下:
Set objPublishDate = objXMLdoc.CreateNode("element","PUBLISHED_DATE","") dShippedDate = FormatDateTime(Date,2)
objPublishDate.Text = dShippedDate
objXMLChildTestNode.appendChild(objPublishDate)
我们对把当前日期赋给PUBLISHED_DATE的Text属性,然后把该结点添加到
PUBLISHER_DISCLAIMER元素中。

5、在ASP下使用XML DOM
要生成前面例子中的XML文档,我们可以用ASP来生成。

我们将创建一个简单的ASP页,让你只需点击按钮,就可创建XML文档。

为了完成这件事情,我们用了带有Windows脚本构件的ASP网页,由它来生成XML。

我们将用Windows Script Component Wizard来生成初始代码。

(如果你没有wizard,可到微软的脚本栏目中去寻找。

)
(1)创建脚本组件
开始时运行Windows Script Component Wizard。

在第一个窗口中,输入XMLDom 作为组件名称,然后单击Next。

确信VBScript和支持Active Server Pages选项在第二个窗口中被选中,然后单击Next 两次。

在第四个窗口,输入CreateXML,作为我们的脚本对象的唯一方法。

再单击Next 两次,最后再点击Finish。

完成了这些事情后,wizard 就创建了组件,并把组件添加到你的桌面上。

此时,我们获得了组件的基本结构,但它并不包含任何功能,所以还要添加功能。

要做到这点,双击位于桌面的XMLDom 的快捷键。

完成后,Windows 在记事本上显示出初始代码。

注意组件本身是个XML 文档。

要添加CreateXML 代码,我们将创建一个子过程来代替函数。

所以,删除下面的行
function CreateXML()
CreateXML = "Temporary Value"
end function
在该处输入列表A中的代码
(2)构造ASP网页
为了创建ASP网页,打开你所熟悉的HTML 编辑器,输入列表B中的代码。

确保Window.Navigate 行指向合适的文件夹。

要了解其是如何工作的,在Internet Explorer中打开该页。

一旦打开后,就会出现一个信息,告诉你XML已经创建了成功,并出现一个Show 按钮,点击该按钮。

XML DOM 库中更多内容
正如你在样本代码中所见,XML DOM 包含了比我们此处所介绍的更多的方法和属性。

要查找完整的XML文档对象模型,请访问有关微软网站。

同时,如何你想了解XML DOM以及XSL和ASP的高级用法的例子,请访问/onlinedemos.asp。

结论
1、XML正在迅猛发展,同以往的以文本为中心的网页相比,XML的数据模型结构提供了更多的功能,XML 文档对象模型通过编程化的方式,可以为你创建XML文档。

本文中,我们对XML DOM作了入门性的介绍,并且演示了如何在Active Server Pages中使用XML DOM。

2、写XML文件的步骤:
(1)、对象生成
set obj = Server.CreateObject("Microsoft.XMLDOM")
(2)、加载XML文件
obj.load(sourceFileXML)
(3)、原XML文件中的结点的取得
set objRootList = obj.documentElement
(4)、对象生成
set objNew = Server.CreateObject("Microsoft.XMLDOM")
(5)、加载新结点
objNew.LoadXML(strNewNode)
(6)、新结点取得
RootNewNode = objNew.documentElement
(7)、将第(6)步取得的新结点加载到第(3)步取得的结点的后面
objRootList.appendChild(RootNewNode)
(8)、保存XML文件
obj.save(sourceFileXML)
(9)、释放生成的对象
set obj = nothing
set objNew = nothing
五、XML对大小写是敏感的
而在XML中,所有的元素都必须要有一个结束标记,如:
<p>This is a paragraph</p>
<p>This is another paragraph</p>
注意:从前面的例子中你可能已经注意到了,XML声明没有结束标记。

这并不是一个错误。

因为声明并不是XML文档的一部分。

它不是一个XML元素,因此它不能有结束标记。

XML对大小写是敏感的,这一点不象HTML。

在XML中,标记<Letter> 和标记<letter> 是不一样的。

因此,打开和结束标记的大小写应该写成相同的:
<Message>This is incorrect</message>
<message>This is correct</message>
所有的XML元素都必须合理嵌套
如果标记的嵌套不合理,在XML中是没有意义的。

在HTML中,有些元素可以被不适当地彼此嵌套,例如:
<b><i>This text is bold and italic</b></i>
而在XML ,所有元素都必须彼此合理地嵌套,例如:
<b><i>This text is bold and italic</i></b>
所有的XML文档都必须要有一个根标记
在一个XML文档中的第一个标记就是根标记。

所有的XML文档都必须包含一个标记对来定义根
元素。

所有的其他元素都必须嵌套到根元素里面。

所有的元素都可以有子元素。

子元素都必须正确地嵌套到母元素中。

<root>
<child>
<subchild>.....</subchild>
</child>
</root>
必须将属性值引起来
在XML中,在属性值周围省略引号是非法的。

同HTML一样,XML元素的名/值对中可以有属性。

在XML中,属性值必须引起来。

看看下面的两个XML文档。

第一个是正确的,第二个是错误的:
<?xml version="1.0"?>
<note date=12/11/99>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
<?xml version="1.0"?>
<note date="12/11/99">
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
文档中的第一个错误是在note 元素中的数据属性没有引起来。

这样是正确的:
date="12/11/99"。

这样是错误的: date=12/11/99。

在XML中,空格是保留的
在XML中,文档的空格不能被删除。

这一点不象HTML。

在HTML中,这样一句话: Hello my name is Tove, 将被显示成这样:Hello my name is Tove, 因为HTML 把空格除去了。

在XML中, CR / LF被转换成LF
在XML中, 一个新行通常被存储为LF。

你知道什么是打字机吗?打字机是上个世纪使用的一种打字机器设备。

当你在打字机上打了一行以后,你要手动回车到左边的空白,然后手动进纸。

在Windows 应用程序中,文本中的新一行通常存储为CR LF 字符对。

在Unix 应用程序中,新的一行通常被存储为一个LF字符。

而有些应用程序只用一个CR字符来存储新行。

相关文档
最新文档