例子:通过使用XSL,ASP来编辑XML
编辑
Contact.asp 是一个比较普遍的现象。这儿有两个功能在编辑ASP页面中起了主要作用。第一个是loadXMLFile功能,它LOAD并传输XML文件使之显示出来;第二个是 updateXML 功能,它适用于编辑 XML文件国。
ASP File:
EditContact.asp:
<%
'-----------------------------------------------------------
'"loadXMLFile"
函数接受两个参数.
'strXMLFile
- XML文件的路径名和文件名.
'strXSLFilee
- XSL文件的路径名和文件名.
'-----------------------------------------------------------
Function
loadXMLFile(strXMLFile, strXSLFile)
'本地变量
Dim
objXML Dim objXSL
'初始化XMLDOM对象.
set
objXML = Server.CreateObject("Microsoft.XMLDOM")
'关闭同步加载的文件.
objXML.async
= false
'加载XML文件.
objXML.load(strXMLFile)
'初始化用于加载XSL文件的XMLDOM对象.
set
objXSL = Server.CreateObject("Microsoft.XMLDOM")
'Turn off
asyncronous file loading.
objXSL.async
= false 'Load the XSL file.
objXSL.load(strXSLFile)
'Use the
"transformNode" method of the XMLDOM to apply the
'XSL stylesheet to the XML document. Then the output is
'written
to the client.
Response.Write(objXML.transformNode(objXSL))
End
Function
'-----------------------------------------------------------
'The
"updateXML" Function accepts one parameter.
'strXMLFile
- The path and file name of the XML file.
'-----------------------------------------------------------
Function
updateXML(strXMLFile)
'Declare
local variables.
Dim objDom
Dim
objRoot
Dim
objField
Dim x
'Instantiate
the XMLDOM Object.
set objDOM
= Server.CreateObject("Microsoft.XMLDOM")
'Turn off
asyncronous file loading.
objDOM.async
= false
'Load the XML
file.
objDOM.load
strXMLFile
'Set the
objRoot variable equal to the root element of the
'XML file
by calling the documentElement method of the
'objDOM
(XMLDOM) object.
Set
objRoot = objDom.documentElement
'Iterate
through the Form Collection and write the
'submitted
values to the XML file.
For x = 1
to Request.Form.Count
'Check see
if "btn" is in the submitted value, if so,
'it is a
button and should be ignored.
If
instr(1,Request.Form.Key(x),"btn") = 0 Then
'Set
objField variable equal to a field_value element by
'calling
the selectSingleNode method of the objRoot
'(documentElement)
object. The SelectSingleNode method
'accepts a
string parameter for querying the XML document.
'In this
case, the current value of the key property of
'the Form
Collection is used to find the appropriate
'field_value
element (more on this later).
Set
objField = objRoot.selectSingleNode("field[@id='" & _
Request.Form.Key(x) & "']/field_value")
'Set the
text property of the objField (field_value)
'element
equal to the value of the current form field.
objField.Text
= Request.Form(x)
End If
Next
'After the
XML file has been edited, is must be saved.
objDom.save
strXMLFile
'Release
all of your object references.
Set objDom
= Nothing
Set objRoot
= Nothing
Set
objField = Nothing
'Call the
loadXMLFile method, passing in the newly edited
'XML file
and the updatedcontact.xsl style sheet. This will
'allow the
client to see the edited information. More on the
'updatedcontact.xsl
file later.
loadXMLFile
strXMLFile,
server.MapPath("updatedcontact.xsl")
End Function
'Test to
see if the form has been submitted. If it has,
'update the
XML file. If not, transform the XML file for
'editing.
If
Request.Form("btnSubmit") = "" Then
loadXMLFile
server.MapPath("Contact.xml"), _ server.MapPath("contact.xsl")
Else
updateXML
server.MapPath("Contact.xml")
End If
%>
正如你所看到的一样,ASP文件处理了整个XML文件更新的过程。如果表单已被提交,那么XML文件则会被打开并更新。如果表单没有被提交,那么XML文件会由contact.xsl传送至HTML格式,以便用户自行编辑。详见以下举例:
For x = 1 to
Request.Form.Count
If
instr(1,Request.Form.Key(x),"btn") = 0 Then
Set
objField = objRoot.selectSingleNode("field[@id='" & _
Request.Form.Key(x) & "']/field_value")
objField.Text
= Request.Form(x)
End If
Next
上述代码是更新XML文件的代码。SelectSingleNode 方法是关键。
在上述举例中,问句是"field[@id='"&
request.form.key(x) & "']/field_value"。所询问的是:要求做为 子域元素 的field_value element 包含一个"ID",此ID而且是与现有的Form Collection中的关键值相匹配。一旦获得适当的节点,则可以更新文本属性以便与Form Collection中的值相匹配。