如你熟知ASP,XML和HTML4。0,请读下列示例
将表单数据存为XML格式
通常的,ASP中表单提交的数据一般被写入数据库。然而,如果你想让发送数据更为简便易行,那么,可以将它书写为XML文件格式。这种方式对于在web上收集的数据更为有用。因为XML对于所用平台来说非常的简便,所以用不着转换数据格式。
将提交的数据写为XML文档,则需要通过Microsoft XMLDOM Object创建一个新的XML文档。Microsoft XMLDOM Object拥有一个可扩展对象库,通过它可以创建elements,attributes以及values,通过创建的这些项目则可以组成XML文档。我无法将整个目标模型做个完整的介绍,因为它所包含的内容太广泛,对于将建成的网站来说,目标模型甚至通过自身也能组建一个相对完整的部份。
在XMLDOM Object被创建出来之后,通过创建目标(此目标是关于组成XML文档中每一层的ELEMENTS而言)XML的结构会被演示出来。接下来,会举例说明XMLDOM是怎样被创建出来的。创建root element之后,将它附加在XMLDOM文件上。然后创建child elements并附加在root element上,最后存储文档。
演示Microsoft XMLDOM 对象
Dim objDom
Dim objRoot
Dim objChild1
Dim objChild2
Dim objPI
" XMLDOM 对象使用Server对象的CreateObject方法创建
Set objDom = Server. CreateObject ( " Microsoft.XMLDOM " )
" 使用XMLDOM的createElemnet方法创建一个IXMLDOMElement对象。
" createElemnet方法又一个string参数,这个string 表示该element的名称。
返回值被传递到objRoot变量。objRoot表示XML文档的根元素.。
Set objRoot = objDom.createElement( " rootElement " )
" Use the appendChild Method of the XMLDOM Object to add the objRoot
" Element Reference to the XML Document.
objDom.appendChild objRoot
" Now, following the same steps, you will create references to the
" child elements for the XML Document. The only difference is , when the
" child elements are appended to the document, you will call the
" appendChild Method of the IXMLDOMElement Object rather than the
" appendChild Method of the XMLDOM Object. By using the IXMLDOMElement
" to append the children, you are differentiating ( and applying tiered
" structure to) the child elements from the root element.
Set objChild1 = objDom.createElement( " childElement1 " )
objRoot.appendChild objChild1
Set objChild1 = objDom.createElement( " childElement2 " )
objRoot.appendChild objChild2
" The final step to take care of before saving this document is to add
" an XML processing instruction. This is necessary so that XML parsers
" will recognize this document as an XML document.
Set objPI = objDom.createProcessingInstruction( " xml " , " vertsion= " 1.0 "" )
" Call the insertBefore Method of the XMLDOM Object in order to insert
" the processing instruction before the root element (the zero element
" in the XMLDOM childNodes Collection).
objDom.insertBefore objPI, objDom.childNodes( 0 )
" Calling the Save Method of the XMLDOM Object will save this XML
" document to your disk drive. In this case , the document will be saved
" to the " c: " drive and will be named " MyXMLDoc.xml " . When saving an
" XML document, if the file does not exist, it will be created. If it
" does exist, it will be overwritten.
objDom.Save " c:MyXMLDoc.xml"
% >
文档被存档之后,如果你再打开这个文档,那么则会以如下代码列表形式出现:
MyXMLDoc.xml:
< rootElement >
< childElement1 />
< childElement2 />
</ rootElement >
在"MyXMLDoc.xml"文档中,childElement1 和 childElement2 会以空的elements形式出现。如果它们被赋值,那么每个值都将由标记符括起来。
现在,让我们来思考一下如何将HTML数据写到XML文档中去。我们已经知道该如何创建和存储XML文档。将一个表单数据写到XML文档中去的过程,现在已演变成为Request Object"s Form Collection以及将每一个表单域的value书定到XML element value 中去的步骤重复。以上可以通过ASP来完成。
例:将数据输送到XML
现在,我们举一个普通的HTML表单的例子来说明。此Form有用户名,地址,电话,以及E-MAIL等几个域。并将这些信息写入XML文件中并保存。
EnterContact.html:
< head >
< title >
Contact Information
</ title >
</ head >
< body >
< table border ="1" >
< form action ="ProcessForm.asp" method ="post" >
< tr >< td colspan ="2" > Please input your contact infomation here: </ td ></ tr >
< tr >< td > First Name: </ td >< td >< input type ="text" id ="FirstName" name ="FirstName" ></ td ></ tr >
< tr >< td > Last Name: </ td >< td >< input type ="text" id ="LastName" name ="LastName" ></ td ></ tr >
< tr >< td > Address #1: </ td >< td >< input type ="text" id ="Address1" name ="Address1" ></ td ></ tr >
< tr >< td > Address #2: </ td >< td >< input type ="text" id ="Address2" name ="Address2" ></ td ></ tr >
< tr >< td > Phone Number: </ td >< td >< input type ="text" id ="Phone" name ="Phone" ></ td ></ tr >
< tr >< td > E-Mail: </ td >< td >< input type ="text" id ="EMail" name ="EMail" ></ td ></ tr >
< tr >< td colspan ="2" align ="center" >< input type ="submit" id ="btnSub" name ="btnSub" value ="Submit" ></ td ></ tr >
</ form >
</ table >
</ body >
</ html >
将Form 中数据发送到ProcessForm.asp.。这是一个ASP页面,在这个ASP中将反复调用同一个函数将form数据写入XML
文件。
ProcessForm.asp:
' --------------------------------------------------------------------
' The "ConvertFormtoXML" Function accepts to parameters.
' strXMLFilePath - The physical path where the XML file will be saved.
' strFileName - The name of the XML file that will be saved.
' --------------------------------------------------------------------
Function ConvertFormtoXML(strXMLFilePath, strFileName)
' Declare local variables.
Dim objDom
Dim objRoot
Dim objField
Dim objFieldValue
Dim objAttID
Dim objAttTabOrder
Dim objPI
Dim x
' Instantiate the Microsoft XMLDOM.
Set objDom = server. CreateObject ( " Microsoft.XMLDOM " )
objDom.PreserveWhiteSpace = True
' Create your root element and append it to the XML document.
Set objRoot = objDom.CreateElement( " Contact " )
objDom.AppendChild objRoot
' Iterate through the Form Collection of the Request Object.
For x = 1 To Request.Form.Count
' Check to see if "btn" is in the name of the form element.
' If it is, then it is a button and we do not want to add it
' to the XML document.
If Instr ( 1 ,Request.Form.Key(x), " btn " ) = 0 Then
' Create an element, "field".
Set objField = objDom.CreateElement( " Field " )
' Create an attribute, "ID".
Set objAttID = objDom.CreateAttribute( " ID " )
' Set the value of the id attribute equal the the name of
' the current form field.
objAttID.Text = Request.Form.Key(x)
' The setAttributeNode method will append the id attribute
' to the field element.
objField.SetAttributeNode objAttID
' Create another attribute, "taborder". This just orders the
' elements.
Set objattTabOrder = objDom.createAttribute( " taborder " )
' Set the value of the taborder attribute.
objAttTabOrder.Text = x
' Append the taborder attribute to the field element.
objField.SetAttributeNode objAttTabOrder
' Create a new element, "field_value".
Set objFieldValue = objDom.CreateElement( " FieldValue " )
' Set the value of the field_value element equal to
' the value of the current field in the Form Collection.
objFieldValue.Text = Request.Form(x)
' Append the field element as a child of the root element.
objRoot.AppendChild objField
' Append the field_value element as a child of the field elemnt.
objField.AppendChild objFieldValue
End If
Next
' Create the xml processing instruction.
Set objPI = objDom.CreateProcessingInstruction( " xml " , " version=""1.0"" " )
' Append the processing instruction to the XML document.
objDom.InsertBefore objPI, objDom.ChildNodes( 0 )
' Save the XML document.
objDom.Save strXMLFilePath & "" & strFileName
' Release all of your object references.
Set objDom = Nothing
Set objRoot = Nothing
Set objField = Nothing
Set objFieldValue = Nothing
Set objAttID = Nothing
Set objAttTabOrder = Nothing
Set objPI = Nothing
End Function
' Do not break on an error.
On Error Resume Next
' Call the ConvertFormtoXML function, passing in the physical path to
' save the file to and the name that you wish to use for the file.
ConvertFormtoXML " F:/Asp/ " , " Contact.xml"
' Test to see if an error occurred, if so, let the user know.
' Otherwise, tell the user that the operation was successful.
If Err.Number <> 0 then
Response.Write( " Errors occurred while saving your form submission. " )
Else
Response.Write( " Your form submission has been saved.<br><a href='javascript:history.go(-1)'>Go Back</a> " )
End If
% >
如果你是在你自己的应用程序中使用以上代码,请谨记一件事情,在"ConvertFormtoXML"函数已经运行的情况下,如果XML文件名已经存在,那么,文件将会被覆盖。在此,我建议在使用"ConvertFormtoXML"功能前,最好用随机建立的文件名。这样,就将有价值数据被改写的风险降为零。
关于XML文件的产生,举例如下:
Contact.xml:
<!-- edited with XMLSPY v2004 rel. 4 U (http://www.xmlspy.com) by Dicky (Apple'S Eden) -->
< contact >
< Field ID ="FirstName" TabOrder ="1" >
< FieldValue > Dicky </ FieldValue >
</ Field >
< Field ID ="LastName" TabOrder ="2" >
< FieldValue > Gu </ FieldValue >
</ Field >
< Field ID ="Address1" TabOrder ="3" >
< FieldValue > ShangHai </ FieldValue >
</ Field >
< Field ID ="Address2" TabOrder ="4" >
< FieldValue > BeiJing </ FieldValue >
</ Field >
< Field ID ="Phone" TabOrder ="5" >
< FieldValue > 123456 </ FieldValue >
</ Field >
< Field ID ="EMail" TabOrder ="6" >
< FieldValue > AppleBBS@GMail.Com </ FieldValue >
</ Field >
</ contact >
我在此建议:将以上代码复制到你个人网站服务器上的同名页面上,并运行以上示例时。请一定要明确你使用的是对你个人服务器有效的路径和文件名。
当你一切准备好时,请再次检验你的XML文件。