如你熟知ASP,XML和HTML4。0,请读下列示例
将表单数据存为XML格式
通常的,ASP中表单提交的数据一般被写入数据库。然而,如果你想让发送数据更为简便易行,那么,可以将它书写为XML文件格式。这种方式对于在web上收集的数据更为有用。因为XML对于所用平台来说非常的简便,所以用不着转换数据格式。
将提交的数据写为XML文档,则需要通过Microsoft XMLDOM Object创建一个新的XML文档。Microsoft XMLDOM Object拥有一个可扩展对象库,通过它可以创建elements,attributes以及values,通过创建的这些项目则可以组成XML文档。我无法将整个目标模型做个完整的介绍,因为它所包含的内容太广泛,对于将建成的网站来说,目标模型甚至通过自身也能组建一个相对完整的部份。
在XMLDOM Object被创建出来之后,通过创建目标(此目标是关于组成XML文档中每一层的ELEMENTS而言)XML的结构会被演示出来。接下来,会举例说明XMLDOM是怎样被创建出来的。创建root element之后,将它附加在XMLDOM文件上。然后创建child elements并附加在root element上,最后存储文档。
演示Microsoft XMLDOM 对象
<
%
Dim
objDom
Dim
objRoot
Dim
objChild1
Dim
objChild2
Dim
objPI
"
XMLDOM 对象使用Server对象的CreateObject方法创建
Set
objDom
=
Server.
CreateObject
(
"
Microsoft.XMLDOM
"
)
"
使用XMLDOM的createElemnet方法创建一个IXMLDOMElement对象。
"
createElemnet方法又一个string参数,这个string 表示该element的名称。
返回值被传递到objRoot变量。objRoot表示XML文档的根元素.。
Set
objRoot
=
objDom.createElement(
"
rootElement
"
)
"
Use the appendChild Method of the XMLDOM Object to add the objRoot
"
Element Reference
to
the XML Document.
objDom.appendChild objRoot
"
Now, following the same steps, you will create references to the
"
child elements
for
the XML Document. The only difference
is
, when the
"
child elements are appended to the document, you will call the
"
appendChild Method of the IXMLDOMElement
Object
rather than the
"
appendChild Method of the XMLDOM Object. By using the IXMLDOMElement
"
to
append the children, you are differentiating (
and
applying tiered
"
structure to) the child elements from the root element.
Set
objChild1
=
objDom.createElement(
"
childElement1
"
)
objRoot.appendChild objChild1
Set
objChild1
=
objDom.createElement(
"
childElement2
"
)
objRoot.appendChild objChild2
"
The final step to take care of before saving this document is to add
"
an XML processing instruction. This
is
necessary so that XML parsers
"
will recognize this document as an XML document.
Set
objPI
=
objDom.createProcessingInstruction(
"
xml
"
,
"
vertsion=
"
1.0
""
)
"
Call the insertBefore Method of the XMLDOM Object in order to insert
"
the processing instruction before the root element (the zero element
"
in the XMLDOM childNodes Collection).
objDom.insertBefore objPI, objDom.childNodes(
0
)
"
Calling the Save Method of the XMLDOM Object will save this XML
"
document
to
your disk drive. In this
case
, the document will be saved
"
to the
"
c:
"
drive and will be named
"
MyXMLDoc.xml
"
. When saving an
"
XML document,
if
the file does
not
exist, it will be created.
If
it
"
does exist, it will be overwritten.
objDom.Save
"
c:MyXMLDoc.xml"
%
>
文档被存档之后,如果你再打开这个文档,那么则会以如下代码列表形式出现:
MyXMLDoc.xml:
<?
xml version="1.0"
?>
<
rootElement
>
<
childElement1
/>
<
childElement2
/>
</
rootElement
>
在"MyXMLDoc.xml"文档中,childElement1 和 childElement2 会以空的elements形式出现。如果它们被赋值,那么每个值都将由标记符括起来。
现在,让我们来思考一下如何将HTML数据写到XML文档中去。我们已经知道该如何创建和存储XML文档。将一个表单数据写到XML文档中去的过程,现在已演变成为Request Object"s Form Collection以及将每一个表单域的value书定到XML element value 中去的步骤重复。以上可以通过ASP来完成。
例:将数据输送到XML
现在,我们举一个普通的HTML表单的例子来说明。此Form有用户名,地址,电话,以及E-MAIL等几个域。并将这些信息写入XML文件中并保存。
EnterContact.html:
<
html
>
<
head
>
<
title
>
Contact Information
</
title
>
</
head
>
<
body
>
<
table
border
="1"
>
<
form
action
="ProcessForm.asp"
method
="post"
>
<
tr
><
td
colspan
="2"
>
Please input your contact infomation here:
</
td
></
tr
>
<
tr
><
td
>
First Name:
</
td
><
td
><
input
type
="text"
id
="FirstName"
name
="FirstName"
></
td
></
tr
>
<
tr
><
td
>
Last Name:
</
td
><
td
><
input
type
="text"
id
="LastName"
name
="LastName"
></
td
></
tr
>
<
tr
><
td
>
Address #1:
</
td
><
td
><
input
type
="text"
id
="Address1"
name
="Address1"
></
td
></
tr
>
<
tr
><
td
>
Address #2:
</
td
><
td
><
input
type
="text"
id
="Address2"
name
="Address2"
></
td
></
tr
>
<
tr
><
td
>
Phone Number:
</
td
><
td
><
input
type
="text"
id
="Phone"
name
="Phone"
></
td
></
tr
>
<
tr
><
td
>
E-Mail:
</
td
><
td
><
input
type
="text"
id
="EMail"
name
="EMail"
></
td
></
tr
>
<
tr
><
td
colspan
="2"
align
="center"
><
input
type
="submit"
id
="btnSub"
name
="btnSub"
value
="Submit"
></
td
></
tr
>
</
form
>
</
table
>
</
body
>
</
html
>
将Form 中数据发送到ProcessForm.asp.。这是一个ASP页面,在这个ASP中将反复调用同一个函数将form数据写入XML
文件。
ProcessForm.asp:
<
%
'
--------------------------------------------------------------------
'
The "ConvertFormtoXML" Function accepts to parameters.
'
strXMLFilePath - The physical path where the XML file will be saved.
'
strFileName - The name of the XML file that will be saved.
'
--------------------------------------------------------------------
Function
ConvertFormtoXML(strXMLFilePath, strFileName)
'
Declare local variables.
Dim
objDom
Dim
objRoot
Dim
objField
Dim
objFieldValue
Dim
objAttID
Dim
objAttTabOrder
Dim
objPI
Dim
x
'
Instantiate the Microsoft XMLDOM.
Set
objDom
=
server.
CreateObject
(
"
Microsoft.XMLDOM
"
)
objDom.PreserveWhiteSpace
=
True
'
Create your root element and append it to the XML document.
Set
objRoot
=
objDom.CreateElement(
"
Contact
"
)
objDom.AppendChild objRoot
'
Iterate through the Form Collection of the Request Object.
For
x
=
1
To
Request.Form.Count
'
Check to see if "btn" is in the name of the form element.
'
If it is, then it is a button and we do not want to add it
'
to the XML document.
If
Instr
(
1
,Request.Form.Key(x),
"
btn
"
)
=
0
Then
'
Create an element, "field".
Set
objField
=
objDom.CreateElement(
"
Field
"
)
'
Create an attribute, "ID".
Set
objAttID
=
objDom.CreateAttribute(
"
ID
"
)
'
Set the value of the id attribute equal the the name of
'
the current form field.
objAttID.Text
=
Request.Form.Key(x)
'
The setAttributeNode method will append the id attribute
'
to the field element.
objField.SetAttributeNode objAttID
'
Create another attribute, "taborder". This just orders the
'
elements.
Set
objattTabOrder
=
objDom.createAttribute(
"
taborder
"
)
'
Set the value of the taborder attribute.
objAttTabOrder.Text
=
x
'
Append the taborder attribute to the field element.
objField.SetAttributeNode objAttTabOrder
'
Create a new element, "field_value".
Set
objFieldValue
=
objDom.CreateElement(
"
FieldValue
"
)
'
Set the value of the field_value element equal to
'
the value of the current field in the Form Collection.
objFieldValue.Text
=
Request.Form(x)
'
Append the field element as a child of the root element.
objRoot.AppendChild objField
'
Append the field_value element as a child of the field elemnt.
objField.AppendChild objFieldValue
End
If
Next
'
Create the xml processing instruction.
Set
objPI
=
objDom.CreateProcessingInstruction(
"
xml
"
,
"
version=""1.0""
"
)
'
Append the processing instruction to the XML document.
objDom.InsertBefore objPI, objDom.ChildNodes(
0
)
'
Save the XML document.
objDom.Save strXMLFilePath
&
""
&
strFileName
'
Release all of your object references.
Set
objDom
=
Nothing
Set
objRoot
=
Nothing
Set
objField
=
Nothing
Set
objFieldValue
=
Nothing
Set
objAttID
=
Nothing
Set
objAttTabOrder
=
Nothing
Set
objPI
=
Nothing
End Function
'
Do not break on an error.
On
Error
Resume
Next
'
Call the ConvertFormtoXML function, passing in the physical path to
'
save the file to and the name that you wish to use for the file.
ConvertFormtoXML
"
F:\Asp\
"
,
"
Contact.xml"
'
Test to see if an error occurred, if so, let the user know.
'
Otherwise, tell the user that the operation was successful.
If
Err.Number
<>
0
then
Response.Write(
"
Errors occurred while saving your form submission.
"
)
Else
Response.Write(
"
Your form submission has been saved.<br><a href='javascript:history.go(-1)'>Go Back</a>
"
)
End
If
%
>
如果你是在你自己的应用程序中使用以上代码,请谨记一件事情,在"ConvertFormtoXML"函数已经运行的情况下,如果XML文件名已经存在,那么,文件将会被覆盖。在此,我建议在使用"ConvertFormtoXML"功能前,最好用随机建立的文件名。这样,就将有价值数据被改写的风险降为零。
关于XML文件的产生,举例如下:
Contact.xml:
<?
xml version="1.0"
?>
<!--
edited with XMLSPY v2004 rel. 4 U (http://www.xmlspy.com) by Dicky (Apple'S Eden)
-->
<
contact
>
<
Field
ID
="FirstName"
TabOrder
="1"
>
<
FieldValue
>
Dicky
</
FieldValue
>
</
Field
>
<
Field
ID
="LastName"
TabOrder
="2"
>
<
FieldValue
>
Gu
</
FieldValue
>
</
Field
>
<
Field
ID
="Address1"
TabOrder
="3"
>
<
FieldValue
>
ShangHai
</
FieldValue
>
</
Field
>
<
Field
ID
="Address2"
TabOrder
="4"
>
<
FieldValue
>
BeiJing
</
FieldValue
>
</
Field
>
<
Field
ID
="Phone"
TabOrder
="5"
>
<
FieldValue
>
123456
</
FieldValue
>
</
Field
>
<
Field
ID
="EMail"
TabOrder
="6"
>
<
FieldValue
>
[email protected]
</
FieldValue
>
</
Field
>
</
contact
>
我在此建议:将以上代码复制到你个人网站服务器上的同名页面上,并运行以上示例时。请一定要明确你使用的是对你个人服务器有效的路径和文件名。
当你一切准备好时,请再次检验你的XML文件。