海妖 发表于 2015-1-16 22:29:23

ASP网页设计用XSL.ASP编纂XML文档

对于中小型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为移动电话互联网客户服务。

若天明 发表于 2015-1-19 14:48:00

接下来就不能纸上谈兵了,最好的方法其实是实践。实践,只能算是让你掌握语言特性用的。而提倡做实际的Project也不是太好,因为你还没有熟练的能力去综合各种技术,这样只能使你自己越来越迷糊。

飘灵儿 发表于 2015-1-25 09:18:19

Response:从字面上讲是“响应”,因此这个是服务端向客户端发送东西的,例如Response.Write

小女巫 发表于 2015-2-2 20:50:10

如何学好ASP,以前也有人问过,把回答给你转过来看看能否对你有帮助:

不帅 发表于 2015-2-8 06:04:58

ASP主要是用好六个对象,其实最主要的是用好其中两个:response和request,就可以随心所欲地控制网页变换和响应用户动作了。

蒙在股里 发表于 2015-2-24 17:21:06

它可通过内置的组件实现更强大的功能,如使用A-DO可以轻松地访问数据库。

因胸联盟 发表于 2015-3-15 05:58:06

完全不知道到底自己学的是什么。最后,除了教程里面说的几个例子,还是什么都不会。

透明 发表于 2015-3-21 20:01:30

哪些内置对象是可以跳过的,或者哪些属性和方法是用不到的?
页: [1]
查看完整版本: ASP网页设计用XSL.ASP编纂XML文档