以文本方式查看主题 - 中文XML论坛 - 专业的XML技术讨论区 (http://bbs.xml.org.cn/index.asp) -- 『 XSL/XSLT/XSL-FO/CSS 』 (http://bbs.xml.org.cn/list.asp?boardid=8) ---- 利用XSL和ASP检索和更新XML文件内容[推荐] (http://bbs.xml.org.cn/dispbbs.asp?boardid=8&rootid=&id=7644) |
-- 作者:宇宙人 -- 发布时间:5/18/2004 5:13:00 PM -- 利用XSL和ASP检索和更新XML文件内容[推荐] 利用XML文件存储数据,可以实现真正的跨平台,给我们的数据实现不同平台的转换带来很大的便利。本文的例子向您展示了如何对XML文件进行数据添加、删除、修改的操作。为了叙述的方便,有时也把本例中的每个人的“个人资料”叫作记录。 首先,我们列出XML文件的所有记录,然后,用服务器端的ASP程序和XSL样式单文件来把XML文件转换到HTML文件里,以便显示在任意浏览器里。 现在假定有一个客户资料文件Userdata.xml如下: <?xml version="1.0" encoding="gb2312"?> <客户资料表> <个人资料> <field id="姓名" taborder="1"> <field_value>张三</field_value> </field> <field id="性别" taborder="2"> <field_value>男性</field_value> </field> <field id="地址" taborder="3"> <field_value>北京市第999号信箱</field_value> </field> <field id="邮政编码" taborder="4"> <field_value>100000</field_value> </field> <field id="电话" taborder="5"> <field_value>86-10-88886666</field_value> </field> <field id="电子邮件" taborder="6"> <field_value>zhangsan@examdomain.com</field_value> </field> </个人资料> <个人资料> <field id="姓名" taborder="1"> <field_value>李四</field_value> </field> <field id="性别" taborder="2"> <field_value>女性</field_value> </field> <field id="地址" taborder="3"> <field_value>上海市黄浦区1208号黄浦大厦A座11层</field_value> </field> <field id="邮政编码" taborder="4"> <field_value>200200</field_value> </field> <field id="电话" taborder="5"> <field_value>86-21-66668888</field_value> </field> <field id="电子邮件" taborder="6"> <field_value>lisi@examdomain.com</field_value> </field> </个人资料> <个人资料> <field id="姓名" taborder="1"> <field_value>杨过</field_value> </field> <field id="性别" taborder="2"> <field_value>男性</field_value> </field> <field id="地址" taborder="3"> <field_value>神雕侠侣桃花岛</field_value> </field> <field id="邮政编码" taborder="4"> <field_value>888888</field_value> </field> <field id="电话" taborder="5"> <field_value>800-810-8080</field_value> </field> <field id="电子邮件" taborder="6"> <field_value>yangguo@examdomain.com</field_value> </field> </个人资料> <个人资料> <field id="姓名" taborder="1"> <field_value>小龙女</field_value> </field> <field id="性别" taborder="2"> <field_value>女</field_value> </field> <field id="地址" taborder="3"> <field_value>神雕侠侣之古慕派</field_value> </field> <field id="邮政编码" taborder="4"> <field_value>999999</field_value> </field> <field id="电话" taborder="5"> <field_value>800-810-9090</field_value> </field> <field id="电子邮件" taborder="6"> <field_value>xiaolongnv@examdomain.com</field_value> </field> </个人资料> </客户资料表> 我们编写Userdata.xsl样式单文件如下: <?xml version="1.0" encoding="gb2312" ?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"> <xsl:template match="/"> <html> <head> <META http-equiv="Content-Type" content="text/html; charset=gb2312" /> </head> <body bgcolor="#0099ff"> <h1>客户资料表</h1> <table border="1" cellpadding="2"> <tr bgcolor="#ccccff"> <td align="center"><b>姓名</b></td> <td align="center"><b>电子邮件</b></td> </tr> <xsl:for-each select="客户资料表/个人资料"> <tr> <td> <a><xsl:attribute name="href">Userdata.asp?mode=viewdetail&email=<xsl:value-of select="field[@id='电子邮件']/field_value"/></xsl:attribute><xsl:value-of select="field[@id='姓名']/field_value"/></a> </td> <td><xsl:value-of select="field[@id='电子邮件']/field_value"/></td> </tr> </xsl:for-each> </table> <br /> <a href="addnewdata.htm">增加新记录</a> </body> </html> </xsl:template> </xsl:stylesheet> XSL样式单文件遍历整个XML文件的内容,并借助HTML的table标记来显示它。这里允许浏览者可以通过点击客户姓名来查看该客户的详细资料,也可以添加新的客户信息。 下面,我们编写Userdata.asp程序来完成XML文件转换,数据的浏览、修改、删除: <% '------------------------------------------------------------------- '删除记录函数deleteDetail '参数说明:[程序详细说明请参照《利用ASP和XSL在线编辑XML文件》] '链接地址:http://www.ccw.com.cn/htm/app/aprog/01_3_28_4.asp 'strXMLFile - 要载入的XML文件。 'strXSLFile - 显示XML文件的XSL样式单文件。 'strEMail - 要删除客户的电子邮件。 '------------------------------------------------------------------- Function deleteDetail(strXMLFile, strXSLFile, strEMail) Dim objDom Dim objRoot Dim objNode set objXML = Server.CreateObject("Microsoft.XMLDOM") objXML.async = false objXML.load strXMLFile Set objRoot = objXML.documentElement Set objNode = objRoot.SelectSingleNode("个人资料[field/field_value='" & strEMail & "']") objRoot.removeChild(objNode) objXML.save strXMLFile loadXMLFile strXMLFile,strXSLFile End Function '------------------------------------------------------------------- '更新记录函数updateDetail '------------------------------------------------------------------- Function updateDetail(strXMLFile, strXSLFile, strEMail) 'Declare local variables. Dim objDom Dim objRoot Dim objContact Dim objField Dim strNewEMail strNewEMail = Request.Form("电子邮件") set objXML = Server.CreateObject("Microsoft.XMLDOM") objXML.async = false objXML.load strXMLFile Set objRoot = objXML.documentElement Set objContact = objRoot.SelectSingleNode("个人资料[field/field_value='" & strEMail & "']") For each objItem in Request.Form Set objField = objContact.selectSingleNode("field[@id='" & objItem & "']/field_value") objField.text = Request.Form(objItem) Next objXML.save strXMLFile viewDetail strXMLFile, strXSLFile, strNewEMail End Function '------------------------------------------------------------------- '显示个人详细资料函数viewDetail '------------------------------------------------------------------- Function viewDetail(strXMLFile, strXSLFile, strEMail) Dim objXML Dim objNode Dim objXSL set objXML = Server.CreateObject("Microsoft.XMLDOM") objXML.async = false objXML.load(strXMLFile) Set objNode = objXML.SelectSingleNode("客户资料表/个人资料[field/field_value='" & strEMail & "']") set objXSL = Server.CreateObject("Microsoft.XMLDOM") objXSL.async = false objXSL.load(strXSLFile) Response.Write(objNode.transformNode(objXSL)) End Function '------------------------------------------------------------------- '显示所有信息函数loadXMLFile '------------------------------------------------------------------- Function loadXMLFile(strXMLFile, strXSLFile) Dim objXML Dim objXSL set objXML = Server.CreateObject("Microsoft.XMLDOM") objXML.async = false objXML.load(strXMLFile) set objXSL = Server.CreateObject("Microsoft.XMLDOM") objXSL.async = false objXSL.load(strXSLFile) Response.Write(objXML.transformNode(objXSL)) End Function Dim strMode Dim strEMail strMode = Request.QueryString("mode") strEMail = Request.QueryString("email") Select Case strMode Case "viewdetail" viewDetail server.MapPath("Userdata.xml"), server.MapPath("viewdetail.xsl"), strEMail Case "editdetail" viewDetail server.MapPath("Userdata.xml"), server.MapPath("editdetail.xsl"), strEMail Case "updatedetail" updateDetail server.MapPath("Userdata.xml"), server.MapPath("viewdetail.xsl"), strEMail Case "deletedetail" deleteDetail server.MapPath("Userdata.xml"), server.MapPath("Userdata.xsl"), strEMail Case Else loadXMLFile server.MapPath("Userdata.xml"), server.MapPath("Userdata.xsl") End Select %> 我们可以利用下面的文件来完成新客户信息的输入,文件addnewdata.htm如下: <html><head><title>客户信息输入</title></head> <body bgcolor="#0099ff"> <form action="processAdd.asp" method="post"> <h3>请输入您的客户信息</h3> 姓 名: <input type="text" id="姓名" name="姓名"><br> 性 别: <input type="text" id="性别" name="性别"><br> 地 址: <input type="text" id="地址" name="地址"><br> 邮政编码: <input type="text" id="邮政编码" name="邮政编码"><br> 电 话: <input type="text" id="电话" name="电话"><br> 电子邮件: <input type="text" id="电子邮件" name="电子邮件"><br><br> <input type="submit" id="btnSub" name="btnSub" value="填好了,发送"><br> </form> </body> </html> 当填写完上面的表单后,提交到数据处理程序processAdd.asp,本程序可以判断Userdata.xml文件是否存在,如果不存在,就建立新文件;否则把提交的数据添加到Userdata.xml中。然后根据提交成功与否,显示数据保存成功与失败。processAdd.asp程序如下: <% '-------------------------------------------------------------------- '添加数据的函数addNewdatatoXML '-------------------------------------------------------------------- Function addNewdatatoXML(strFileName) Dim objDom Dim objRoot Dim objRecord Dim objField Dim objFieldValue Dim objattID Dim objattTabOrder Dim objPI Dim blnFileExists Dim x Set objDom = server.CreateObject("Microsoft.XMLDOM") objDom.preserveWhiteSpace = True blnFileExists = objDom.Load(strFileName) If blnFileExists = True Then Set objRoot = objDom.documentElement Else Set objRoot = objDom.createElement("客户资料表") objDom.appendChild objRoot End If Set objRecord = objDom.createElement("个人资料") objRoot.appendChild objRecord For x = 1 To Request.Form.Count If instr(1,Request.Form.Key(x),"btn") = 0 Then Set objField = objDom.createElement("field") Set objattID = objDom.createAttribute("id") objattID.Text = Request.Form.Key(x) objField.setAttributeNode objattID Set objattTabOrder = objDom.createAttribute("taborder") objattTabOrder.Text = x objField.setAttributeNode objattTabOrder Set objFieldValue = objDom.createElement("field_value") objFieldValue.Text = Request.Form(x) objRecord.appendChild objField objField.appendChild objFieldValue End If Next If blnFileExists = False then Set objPI = objDom.createProcessingInstruction("xml", "version='1.0' encoding='gb2312'") objDom.insertBefore objPI, objDom.childNodes(0) End If objDom.save strFileName Set objDom = Nothing Set objRoot = Nothing Set objRecord = Nothing Set objField = Nothing Set objFieldValue = Nothing Set objattID = Nothing Set objattTabOrder = Nothing Set objPI = Nothing End Function On Error Resume Next addNewdatatoXML server.MapPath("Userdata.xml") If err.number <> 0 then Response.write("<html><body bgcolor='#0099ff'><center><font color=red><b>您提交的表单没有成功保存,请重新提交!!</b><br><br><a href='javascript:history.go(-1)'>点击这里重新进行提交。</a></body></html>") Else Response.write("<html><body bgcolor='#0099ff'><center><font color=red><b>您提交的表单已经成功保存!!!</b><br><br><a href='Userdata.asp'>点击这里查看添加后客户资料表</a></body></html>") End If %> 至此,我们完成对XML文件进行数据添加、浏览、修改、删除的所有工作。当然,也可以根据需要,对所有记录进行排序输出,只需采用XSL:for-each元素的order-by属性即可。以上所有程序在PWS+IE5.5和Netscape下调试通过。 |
-- 作者:Qr -- 发布时间:5/20/2004 5:05:00 PM -- Microsoft VBScript 编译器错误 错误 '800a03f6' 缺少 'End' /iisHelp/common/500-100.asp,行242 msxml3.dll 错误 '80004005' 样式表没有包含文档元素。样式表可能是空的,或它可能不是一个标准格式的 XML 文档。 Userdata.asp,行88 |
-- 作者:wantstudio -- 发布时间:3/3/2005 9:42:00 PM -- Userdata.xsl和Userdata.asp中有若干错误 Userdata.xsl和Userdata.asp中有若干错误 |
-- 作者:wantstudio -- 发布时间:3/3/2005 9:49:00 PM -- Userdata.xsl:&改做&amp; Userdata.asp:viewdetail函数最后一句改做 objXML.loadXML("<客户资料表>"&objNode.xml&"<客户资料表>") Response.Write(objXML.transformNode(objXSL)) 修正人:wantstudio QQ289826296本人热爱HTML,XML,javascript,ASP,VC,32位汇编等编程技术,真诚希望与各位交流
|
-- 作者:wantstudio -- 发布时间:3/4/2005 3:12:00 PM -- 符号的问题 <xmp> <html> </html> </xmp> |
-- 作者:y2uan -- 发布时间:5/23/2005 12:00:00 PM -- 没有错误,但是不能添加 |
-- 作者:menzy -- 发布时间:5/23/2005 6:44:00 PM -- 又没有错误你怎么判断? |
W 3 C h i n a ( since 2003 ) 旗 下 站 点 苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》 |
78.125ms |