📄 0903-0100.htm
字号:
<P> ’查询数据库<BR> sqlStr = "select * from
clientList"<BR> set cConn =
Server.CreateObject("ADODB.Connection")<BR> cConn.Open
"CLIENTS","sa", ""<BR> set rsData =
cConn.Execute(sqlStr)<BR> rsData.MoveFirst()</P>
<P> while (not rsData.EOF )<BR>
’构建联系人子节点<BR> set tmpNode =
xmlDoc.createNode("element","联系人","")<BR>
xmlDoc.documentElement.appendChild(tmpNode)<BR>
’构建姓名、ID、公司、Email子节点<BR> for I = 0 to
rsData.Fields.Count - 1<BR> set
childNode =
xmlDoc.createNode("element",rsData.Fields(i).Name,"")<BR>
childNode.text = rsData.Fields(i)<BR>
tmpNode.appendChild(childNode)<BR>
next<BR> rsData.MoveNext()<BR> wend</P>
<P>
Response.Write(xmlDoc.xml)<BR>%></P></TD></TR></TBODY></TABLE></CENTER></DIV>
<P>运行该ASP,将生成下面的XML文档。</P>
<DIV align=center>
<CENTER>
<TABLE width="80%" border=1>
<TBODY>
<TR>
<TD width="100%"><?xml version = "1.0" encoding="GB2312"
standalone = "no"?><BR><BR><联系人列表><BR>
<联系人><BR>
<姓名>张三</姓名><BR>
<ID>1</ID><BR>
<公司>A公司</公司><BR>
<EMAIL>zhang@aaa.com</EMAIL><BR>
</联系人><BR><BR>
<联系人><BR>
<姓名>李四</姓名><BR>
<ID>2</ID><BR>
<公司>B公司</公司><BR>
<EMAIL>li@bbb.org</EMAIL><BR>
</联系人><BR></联系人列表></TD></TR></TBODY></TABLE></CENTER></DIV>
<P>通过调用XML
DOM动态生成XML文档似乎有些繁琐,下面再看一段代码,这段代码是根据前面所描述的DTD(Schema)规则来生成最终的XML实例文档,也即,最终文档的结构是由程序代码来控制的。</P>
<DIV align=center>
<CENTER>
<TABLE width="80%" border=1>
<TBODY>
<TR>
<TD width="100%"><% Response.ContentType="text/xml"
%><BR><?xml version="1.0" encoding="GB2312"
?><BR><联系人列表><BR><BR><% Set cConn =
Server.CreateObject("ADODB.Connection")<BR> cConn.Open
"CLIENTS","sa", ""<BR> Set rsData =
cConn.Execute("select * from clientList")<BR> do while
not rsData.Eof<BR>%><BR><联系人><BR>
<姓名><%=rsData("Name")%></姓名><BR>
<ID><%=rsData("ID")%></ID><BR>
<公司><%=rsData("Company")%></公司><BR>
<Email><%=rsData("Email")%></Email><BR></联系人><BR><%
rsData.MoveNext<BR> Loop<BR>
rsData.Close<BR> Set rsData =
nothing<BR>%><BR><BR></联系人列表></TD></TR></TBODY></TABLE></CENTER></DIV>
<P>运行该ASP,将直接在浏览器显示XML文档,内容同前面得到的结果相同。<BR><BR>在上面的示例中,我们看到的是如何通过自定义文档结构生成XML实例文档。显然,这种方案存在一个前提,那就是,开发者必须了解文档结构,并且通过编程严格控制输出文档的格式。但细心的读者可能会产生疑问:既然数据已经存储在数据库中,又何必大费周折重新定义一遍文档结构呢?XML的自描述性何在?为了解决这个问题,微软将其ADO技术进行了扩展以提供对XML的更大支持,结果是可以根据数据库表的内在结构直接输出XML文档,文档的格式将符合默认的DTD定义。下面是一个用Visual
Basic 6.0编写的实例:</P>
<DIV align=center>
<CENTER>
<TABLE width="80%" border=1>
<TBODY>
<TR>
<TD width="100%">’声明连接和结果集<BR>Dim cConn As ADODB.Connection<BR>Dim
rsData As ADODB.Recordset
<P>Private Sub Form_Load()<BR> ’连接数据库<BR> Dim query As
String<BR> Set cConn = New ADODB.Connection<BR>
cConn.ConnectionString = "DSN=nwind;UID=sa;PWD=;"<BR>
cConn.Open</P>
<P> ’执行数据库查询<BR> query = "Select * FROM
clientList"<BR> Set rsData = cConn.Execute(query)</P>
<P> ’将数据库返回结果集保存至文件<BR> On Error Resume
Next<BR> Kill ("recordset.xml")<BR>
rsData.Save "output.xml", adPersistXML<BR>End
Sub</P></TD></TR></TBODY></TABLE></CENTER></DIV>
<P>下面给出的是该程序执行后生成的XML文档--output.xml。通过分析,可以发现,它实际上是一个内嵌XML
Schema的XML实例文档。该实例文档的主元素是<rs:data>,命名空间rs由xmlns:rs=’urn:schemas-microsoft-com:rowset’定义;数据库查询返回的每一条记录都作为<rs:data>的一个子元素,用<z:row>表示。<z:row>子元素实际上是空元素,信息均以属性的方式体现,属性来自于返回的数据库字段。内嵌的Schema部分<s:Schema
id=’RowsetSchema’>定义了元素<row>的组织结构和规则。</P>
<DIV align=center>
<CENTER>
<TABLE width="80%" border=1>
<TBODY>
<TR>
<TD width="100%"><xml
xmlns:s=’uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882’<BR>
xmlns:dt=’uuid:C2F41010-65B3-11d1-A29F-00AA00C14882’<BR>
xmlns:rs=’urn:schemas-microsoft-com:rowset’<BR>
xmlns:z=’#RowsetSchema’<BR>>
<P><s:Schema id=’RowsetSchema’><BR> <s:ElementType
name=’row’ content=’eltOnly’><BR>
<s:attribute type=’Name’/><BR>
<s:attribute type=’ID’/><BR> <s:attribute
type=’Company’/><BR> <s:attribute
type=’Email’/><BR> <s:extends
type=’rs:rowbase’/><BR> </s:ElementType></P>
<P> <s:AttributeType name=’Name’ rs:number=’1’
rs:nullable=’true’
rs:write=’true’><BR> <s:datatype
dt:type=’string’ dt:maxLength=’10’/><BR>
</s:AttributeType></P>
<P> <s:AttributeType name=’ID’ rs:number=’2’
rs:nullable=’true’ rs:write=’true’><BR>
<s:datatype dt:type=’int’/><BR>
</s:AttributeType></P>
<P> <s:AttributeType name=’Company’ rs:number=’3’
rs:nullable=’true’ rs:write=’true’><BR>
<s:datatype dt:type=’string’ dt:maxLength=’20’/><BR>
</s:AttributeType></P>
<P> <s:AttributeType name=’Email’ rs:number=’4’
rs:nullable=’true’ rs:write=’true’><BR>
<s:datatype dt:type=’string’ dt:maxLength=’20’/><BR>
</s:AttributeType><BR></s:Schema></P>
<P><rs:data><BR> <z:row Name=’张三’ ID=’1’
Company=’A公司’ Email=’zhang@aaa.com’/><BR> <z:row
Name=’李四’ ID=’2’ Company=’B公司’
Email=’li@bbb.org’/><BR></rs:data><BR></xml></P></TD></TR></TBODY></TABLE></CENTER></DIV>
<P>ADO提供了文档保存功能,通过它,ASP可以将数据库返回结果集保存至XML文件,这些XML文件经由XSL样式化后可以在浏览器直接显示,也可以传输至其他应用系统供再次利用。另外,值得一提的是,微软在其ADO2.5和IIS5.0中又增加了更高级的支持,即,可以将数据库返回的结果直接转换为XML在浏览器中显示,而不必先保存至文件。下面的实例片段有力地说明了这一点:</P>
<DIV align=center>
<CENTER>
<TABLE width="80%" border=1>
<TBODY>
<TR>
<TD width="100%"><%<BR> Set rsData =
Server.CreateObject("ADODB.Recordset")<BR>
Response.ContentType="text/xml"
<P> rsData.Open "select * from clientList", "File Name=" &
Server.MapPath("ado.udl")<BR> rsData.Save Response,
adPersistXML<BR> rsData.Close<BR> Set cConn =
nothing<BR>%></P></TD></TR></TBODY></TABLE></CENTER></DIV></DIV>
<P></P>
<P></P></TD></TR></TBODY></TABLE>
</center>
</div>
<P></P>
<P>
<P></P></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -