|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
对于中小型web应用来说,php有很强的竞争力,linux+apache+mysql+php(lamp)的组合几乎可以胜任绝大多数网站的解决方案,对于大型应用来讲,对于系统架构要求更高,需要有成熟的框架支持,jsp的struts是个不错的框架,国内介绍它的资料也非常多,应用逐渐广泛起来。asp就不用说了,简介
本文是"保留至HTML表格数据至XML"的姐妹篇。假如你没读过上文,我倡议您最好先扫瞄一下。本文是创建在上文基本之上的。关于上文的举例,读者不休赐与了一定的回应,一样的,良多人都想晓得怎样编纂XML数据。因而,我写下了此文。
利用XSL形态下:翻开一个XML文件,断定将对它举行编纂、传送至HTML表单,并终极将传送到扫瞄器。此XML元素的值将会被设置成HTML输出域的值。在这些需要的编纂后,则可将这些经处置的信息提交至服务器,XML文件同时也被更新。
第一步LOAD你将会编纂并在扫瞄器以HTML表格情势呈现的文件。在以下的举例中,XML在服务器上的变更被我跳过了,在利用微软的XMLDOM方针下,XML文件是能被XSL文件转化的。我们在此一样能够用到这个技能来转化XML文件。
XMLFile:contact.xml:
<?xmlversion="1.0"?>
<contact>
<fieldid="firstName"taborder="1">
<field_value>Michael</field_value>
</field>
<fieldid="lastName"taborder="2">
<field_value>Qualls</field_value>
</field>
<fieldid="address1"taborder="3">
<field_value>202EastHaverbrook</field_value>
</field>
<fieldid="address2"taborder="4">
<field_value>OklahomaCity,OK73114</field_value>
</field>
<fieldid="phone"taborder="5">
<field_value>4055551234</field_value>
</field>
<fieldid="email"taborder="6">
<field_value>mqualls@vertiscope.com</field_value>
</field>
</contact>
本文举例用到的XML文件与"保留HTML表格至XML"一文中的举例一样。因而你可以更直不雅的察看到个中的联系关系的地方。
XSLFile:contact.xsl:
<?xmlversion="1.0"?>
<xsl:stylesheetxmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:templatematch="/">
<html>
<body>
<formmethod="post"action="EditContact.asp">
<h1>EditContact:</h1>
<tableborder="1"cellpadding="2">
<xsl:for-eachselect="contact/field">
<tr>
<td>
<xsl:value-ofselect="@id"/>
</td>
<td>
<inputtype="text">
<xsl:attributename="id">
<xsl:value-ofselect="@id"/>
</xsl:attribute>
<xsl:attributename="name">
<xsl:value-ofselect="@id"/>
</xsl:attribute>
<xsl:attributename="value">
<xsl:value-ofselect="field_value"/>
</xsl:attribute>
</input>
</td>
</tr>
</xsl:for-each>
</table>
<inputtype="submit"id="btnSubmit"name="btnSubmit"value="Submit"/>
</form>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
这个XSL文件利用了for-eachXSL元素,使之在XSL文件的元素中重复。
由此根元素入手下手,每一个XML"域"元素的"ID"被写成了HTML文本域的"ID"和"NAME"。
一样,XML文件中"域值/FIELD_VALUE"元素的值也被写成为每一个HTML文本域中的"值/value"。最初的了局天然是HTML格局包括了来自XML文件中将会被编纂的值。
我之以是把"ID"从XML文件中的"域"元素里提出来,并把它置于XSL文件中的HTML文本域中,是为了不至于搅浑而且能够增进定名的联贯性。如许的话,不太熟习编码常识的伴侣也能分辩出哪一个XML域配哪个HTML域。
经由过程利用上述两个文件,我们已为入手下手编纂XML文件做好了充实筹办。XSL文件将会传输XML文件以便可以在扫瞄器上显现。我们能够在终端机上做这个传输事情,但不是最好的办理计划。用ASP的话,我们能够在服务器上做这个传输事情。一样的,我们能够在服务器上做XML文件的编纂事情。
例子:经由过程利用XSL,ASP来编纂XML
编纂Contact.asp是一个对照广泛的征象。这儿有两个功效在编纂ASP页面中起了次要感化。第一个是loadXMLFile功效,它LOAD并传输XML文件使之显现出来;第二个是updateXML功效,它合用于编纂XML文件国。
ASPFile:EditContact.asp:
<%
-----------------------------------------------------------
"loadXMLFile"函数承受两个参数.
strXMLFile-XML文件的路径名和文件名.
strXSLFilee-XSL文件的路径名和文件名.
-----------------------------------------------------------
FunctionloadXMLFile(strXMLFile,strXSLFile)
当地变量
DimobjXMLDimobjXSL
初始化XMLDOM工具.
setobjXML=Server.CreateObject("Microsoft.XMLDOM")
封闭同步加载的文件.
objXML.async=false
加载XML文件.
objXML.load(strXMLFile)
初始化用于加载XSL文件的XMLDOM工具.
setobjXSL=Server.CreateObject("Microsoft.XMLDOM")
Turnoffasyncronousfileloading.
objXSL.async=falseLoadtheXSLfile.
objXSL.load(strXSLFile)
Usethe"transformNode"methodoftheXMLDOMtoapplythe
XSLstylesheettotheXMLdocument.Thentheoutputis
writtentotheclient.
Response.Write(objXML.transformNode(objXSL))
EndFunction
-----------------------------------------------------------
The"updateXML"Functionacceptsoneparameter.
strXMLFile-ThepathandfilenameoftheXMLfile.
-----------------------------------------------------------
FunctionupdateXML(strXMLFile)
Declarelocalvariables.
DimobjDom
DimobjRoot
DimobjField
Dimx
InstantiatetheXMLDOMObject.
setobjDOM=Server.CreateObject("Microsoft.XMLDOM")
Turnoffasyncronousfileloading.
objDOM.async=false
LoadtheXMLfile.
objDOM.loadstrXMLFile
SettheobjRootvariableequaltotherootelementofthe
XMLfilebycallingthedocumentElementmethodofthe
objDOM(XMLDOM)object.
SetobjRoot=objDom.documentElement
IteratethroughtheFormCollectionandwritethe
submittedvaluestotheXMLfile.
Forx=1toRequest.Form.Count
Checkseeif"btn"isinthesubmittedvalue,ifso,
itisabuttonandshouldbeignored.
Ifinstr(1,Request.Form.Key(x),"btn")=0Then
SetobjFieldvariableequaltoafield_valueelementby
callingtheselectSingleNodemethodoftheobjRoot
(documentElement)object.TheSelectSingleNodemethod
acceptsastringparameterforqueryingtheXMLdocument.
Inthiscase,thecurrentvalueofthekeypropertyof
theFormCollectionisusedtofindtheappropriate
field_valueelement(moreonthislater).
SetobjField=objRoot.selectSingleNode("field[@id="&_Request.Form.Key(x)&"]/field_value")
SetthetextpropertyoftheobjField(field_value)
elementequaltothevalueofthecurrentformfield.
objField.Text=Request.Form(x)
EndIf
Next
AftertheXMLfilehasbeenedited,ismustbesaved.
objDom.savestrXMLFile
Releaseallofyourobjectreferences.
SetobjDom=Nothing
SetobjRoot=Nothing
SetobjField=Nothing
CalltheloadXMLFilemethod,passinginthenewlyedited
XMLfileandtheupdatedcontact.xslstylesheet.Thiswill
allowtheclienttoseetheeditedinformation.Moreonthe
updatedcontact.xslfilelater.
loadXMLFilestrXMLFile,
server.MapPath("updatedcontact.xsl")
EndFunction
Testtoseeiftheformhasbeensubmitted.Ifithas,
updatetheXMLfile.Ifnot,transformtheXMLfilefor
editing.
IfRequest.Form("btnSubmit")=""Then
loadXMLFileserver.MapPath("Contact.xml"),_server.MapPath("contact.xsl")
Else
updateXMLserver.MapPath("Contact.xml")
EndIf
%>
正如你所看到的一样,ASP文件处置了全部XML文件更新的历程。假如表单已被提交,那末XML文件则会被翻开并更新。假如表单没有被提交,那末XML文件会由contact.xsl传送至HTML格局,以便用户自行编纂。详见以下举例:
Forx=1toRequest.Form.Count
Ifinstr(1,Request.Form.Key(x),"btn")=0Then
SetobjField=objRoot.selectSingleNode("field[@id="&_Request.Form.Key(x)&"]/field_value")
objField.Text=Request.Form(x)
EndIf
Next
上述代码是更新XML文件的代码。SelectSingleNode办法是关头。
在上述举例中,问句是"field[@id="&request.form.key(x)&"]/field_value"。所扣问的是:请求做为子域元素的field_valueelement包括一个"ID",此ID并且是与现有的FormCollection中的关头值相婚配。一旦取得得当的节点,则能够更新文本属性以便与FormCollection中的值相婚配。
强大的可扩展性。ASP具有强大的扩展性,可以实现与多种网络、硬件设备的连接:通过专用的通讯线路远程接入企业;通过远程拨号服务器为远程拨号客户提供服务;通过WAP为移动电话互联网客户服务。 |
|