DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> XML學習教程 >> XML詳解 >> 利用XSL和ASP檢索和更新XML文件內容
利用XSL和ASP檢索和更新XML文件內容
編輯: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>客戶資料?lt;/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&amp;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
''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''>點擊這裡查看添加後客戶資料?lt;/a></body></Html>")
End If
%>

  至此,我們完成對XML文件進行數據添加、浏覽、修改、刪除的所有工作。當然,也可以根據需要,對所有記錄進行排序輸出,只需采用XSL:for-each元素的order-by屬性即可。以上所有程序在PWS+IE5.5和Netscape下調試通過。
XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved