将HTML表单数据存储为XML格式

如你熟知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:

<? xml version="1.0" ?>
< 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:

< 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:

<? xml version="1.0" ?>
<!--  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 > [email protected] </ FieldValue >
    
</ Field >
</ contact >


  我在此建议:将以上代码复制到你个人网站服务器上的同名页面上,并运行以上示例时。请一定要明确你使用的是对你个人服务器有效的路径和文件名。

  当你一切准备好时,请再次检验你的XML文件。

你可能感兴趣的:(html)