如你熟知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文件。