将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 " )

" UsetheappendChildMethodoftheXMLDOMObjecttoaddtheobjRoot
" ElementReference to theXMLDocument.

objDom.appendChildobjRoot

" Now,followingthesamesteps,youwillcreatereferencestothe
" childelements for theXMLDocument.Theonlydifference is ,whenthe
" childelementsareappendedtothedocument,youwillcallthe
" appendChildMethodoftheIXMLDOMElement Object ratherthanthe
" appendChildMethodoftheXMLDOMObject.ByusingtheIXMLDOMElement
" to appendthechildren,youaredifferentiating( and applyingtiered
" structureto)thechildelementsfromtherootelement.

Set objChild1 = objDom.createElement( " childElement1 " )
objRoot.appendChildobjChild1
Set objChild1 = objDom.createElement( " childElement2 " )
objRoot.appendChildobjChild2

" Thefinalsteptotakecareofbeforesavingthisdocumentistoadd
" anXMLprocessinginstruction.This is necessarysothatXMLparsers
" willrecognizethisdocumentasanXMLdocument.

Set objPI = objDom.createProcessingInstruction( " xml " , " vertsion= " 1.0 "" )

" CalltheinsertBeforeMethodoftheXMLDOMObjectinordertoinsert
" theprocessinginstructionbeforetherootelement(thezeroelement
" intheXMLDOMchildNodesCollection).

objDom.insertBeforeobjPI,objDom.childNodes( 0 )

" CallingtheSaveMethodoftheXMLDOMObjectwillsavethisXML
" document to yourdiskdrive.Inthis case ,thedocumentwillbesaved
" tothe " c: " driveandwillbenamed " MyXMLDoc.xml " .Whensavingan
" XMLdocument, if thefiledoes not exist,itwillbecreated. If it
" doesexist,itwillbeoverwritten.

objDom.Save " c:MyXMLDoc.xml"

% >


文档被存档之后,如果你再打开这个文档,那么则会以如下代码列表形式出现:

MyXMLDoc.xml:

<? xmlversion="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 >
ContactInformation
</ title >
</ head >
< body >
< table border ="1" >
< form action ="ProcessForm.asp" method ="post" >
< tr >< td colspan ="2" > Pleaseinputyourcontactinfomationhere: </ td ></ tr >
< tr >< td > FirstName: </ td >< td >< input type ="text" id ="FirstName" name ="FirstName" ></ td ></ tr >
< tr >< td > LastName: </ 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 > PhoneNumber: </ 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"Functionacceptstoparameters.
'
strXMLFilePath-ThephysicalpathwheretheXMLfilewillbesaved.
'
strFileName-ThenameoftheXMLfilethatwillbesaved.
'
--------------------------------------------------------------------
Function ConvertFormtoXML(strXMLFilePath,strFileName)
' Declarelocalvariables.
Dim objDom
Dim objRoot
Dim objField
Dim objFieldValue
Dim objAttID
Dim objAttTabOrder
Dim objPI
Dim x
' InstantiatetheMicrosoftXMLDOM.
Set objDom = server. CreateObject ( " Microsoft.XMLDOM " )
objDom.PreserveWhiteSpace
= True
' CreateyourrootelementandappendittotheXMLdocument.
Set objRoot = objDom.CreateElement( " Contact " )
objDom.AppendChildobjRoot
' IteratethroughtheFormCollectionoftheRequestObject.
For x = 1 To Request.Form.Count
' Checktoseeif"btn"isinthenameoftheformelement.
' Ifitis,thenitisabuttonandwedonotwanttoaddit
' totheXMLdocument.
If Instr ( 1 ,Request.Form.Key(x), " btn " ) = 0 Then
' Createanelement,"field".
Set objField = objDom.CreateElement( " Field " )
' Createanattribute,"ID".
Set objAttID = objDom.CreateAttribute( " ID " )
' Setthevalueoftheidattributeequalthethenameof
' thecurrentformfield.
objAttID.Text = Request.Form.Key(x)
' ThesetAttributeNodemethodwillappendtheidattribute
' tothefieldelement.
objField.SetAttributeNodeobjAttID
' Createanotherattribute,"taborder".Thisjustordersthe
' elements.
Set objattTabOrder = objDom.createAttribute( " taborder " )
' Setthevalueofthetaborderattribute.
objAttTabOrder.Text = x
' Appendthetaborderattributetothefieldelement.
objField.SetAttributeNodeobjAttTabOrder
' Createanewelement,"field_value".
Set objFieldValue = objDom.CreateElement( " FieldValue " )
' Setthevalueofthefield_valueelementequalto
' thevalueofthecurrentfieldintheFormCollection.
objFieldValue.Text = Request.Form(x)
' Appendthefieldelementasachildoftherootelement.
objRoot.AppendChildobjField
' Appendthefield_valueelementasachildofthefieldelemnt.
objField.AppendChildobjFieldValue
End If
Next
' Createthexmlprocessinginstruction.
Set objPI = objDom.CreateProcessingInstruction( " xml " , " version=""1.0"" " )
' AppendtheprocessinginstructiontotheXMLdocument.
objDom.InsertBeforeobjPI,objDom.ChildNodes( 0 )
' SavetheXMLdocument.
objDom.SavestrXMLFilePath & "" & strFileName
' Releaseallofyourobjectreferences.
Set objDom = Nothing
Set objRoot = Nothing
Set objField = Nothing
Set objFieldValue = Nothing
Set objAttID = Nothing
Set objAttTabOrder = Nothing
Set objPI = Nothing
EndFunction
' Donotbreakonanerror.
On Error Resume Next
' CalltheConvertFormtoXMLfunction,passinginthephysicalpathto
'
savethefiletoandthenamethatyouwishtouseforthefile.
ConvertFormtoXML " F:\Asp\ " , " Contact.xml"
' Testtoseeifanerroroccurred,ifso,lettheuserknow.
'
Otherwise,telltheuserthattheoperationwassuccessful.
If Err.Number <> 0 then
Response.Write(
" Errorsoccurredwhilesavingyourformsubmission. " )
Else
Response.Write(
" Yourformsubmissionhasbeensaved.<br><ahref='javascript:history.go(-1)'>GoBack</a> " )
End If
%
>


  如果你是在你自己的应用程序中使用以上代码,请谨记一件事情,在"ConvertFormtoXML"函数已经运行的情况下,如果XML文件名已经存在,那么,文件将会被覆盖。在此,我建议在使用"ConvertFormtoXML"功能前,最好用随机建立的文件名。这样,就将有价值数据被改写的风险降为零。

  关于XML文件的产生,举例如下:


Contact.xml:

<? xmlversion="1.0" ?>
<!-- editedwithXMLSPYv2004rel.4U(http://www.xmlspy.com)byDicky(Apple'SEden) -->
< 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文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值