以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 XML基础 』  (http://bbs.xml.org.cn/list.asp?boardid=1)
----  XML初学进阶学习笔记[原创](续15)[原创]  (http://bbs.xml.org.cn/dispbbs.asp?boardid=1&rootid=&id=9311)


--  作者:卷积内核
--  发布时间:8/12/2004 9:13:00 AM

--  XML初学进阶学习笔记[原创](续15)[原创]
44、这种方案存在一个前提,那就是,开发者必须了解文档结构,并且通过编程严格控制输出文档的格式。
但细心的读者可能会产生疑问:既然数据已经存储在数据库中,又何必大费周折重新定义一遍文档结构呢?
XML的自描述性何在?为了解决这个问题,微软将其ADO技术进行了扩展以提供对XML的更大支持,
结果是可以根据数据库表的内在结构直接输出XML文档,文档的格式将符合默认的DTD定义。下面是一个用Visual Basic 6.0编写的实例:

’声明连接和结果集
Dim cConn As ADODB.Connection
Dim rsData As ADODB.Recordset
Private Sub Form_Load()
  ’连接数据库
  Dim query As String
  Set cConn = New ADODB.Connection
  cConn.ConnectionString = "DSN=nwind;UID=sa;PWD=;"
  cConn.Open

  ’执行数据库查询
  query = "Select * FROM clientList"
  Set rsData = cConn.Execute(query)

  ’将数据库返回结果集保存至文件
  On Error Resume Next
    Kill ("recordset.xml")
  rsData.Save "output.xml", adPersistXML
End Sub

下面给出的是该程序执行后生成的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>的组织结构和规则。

<xml xmlns:s=’uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882’
     xmlns:dt=’uuid:C2F41010-65B3-11d1-A29F-00AA00C14882’
     xmlns:rs=’urn:schemas-microsoft-com:rowset’
     xmlns:z=’#RowsetSchema’
>
<s:Schema id=’RowsetSchema’>
  <s:ElementType name=’row’ content=’eltOnly’>
    <s:attribute type=’Name’/>
    <s:attribute type=’ID’/>
    <s:attribute type=’Company’/>
    <s:attribute type=’Email’/>
    <s:extends type=’rs:rowbase’/>
  </s:ElementType>

  <s:AttributeType name=’Name’ rs:number=’1’ rs:nullable=’true’         rs:write=’true’>
    <s:datatype dt:type=’string’ dt:maxLength=’10’/>
  </s:AttributeType>

  <s:AttributeType name=’ID’ rs:number=’2’ rs:nullable=’true’ rs:write=’true’>
    <s:datatype dt:type=’int’/>
  </s:AttributeType>

  <s:AttributeType name=’Company’ rs:number=’3’ rs:nullable=’true’ rs:write=’true’>
    <s:datatype dt:type=’string’ dt:maxLength=’20’/>
  </s:AttributeType>

  <s:AttributeType name=’Email’ rs:number=’4’ rs:nullable=’true’ rs:write=’true’>
    <s:datatype dt:type=’string’ dt:maxLength=’20’/>
  </s:AttributeType>
</s:Schema>

<rs:data>
  <z:row Name=’张三’ ID=’1’ Company=’A公司’ Email=’zhang@aaa.com’/>
  <z:row Name=’李四’ ID=’2’ Company=’B公司’ Email=’li@bbb.org’/>
</rs:data>
</xml>

ADO提供了文档保存功能,通过它,ASP可以将数据库返回结果集保存至XML文件,
这些XML文件经由XSL样式化后可以在浏览器直接显示,也可以传输至其他应用系统供再次利用。
另外,值得一提的是,微软在其ADO2.5和IIS5.0中又增加了更高级的支持,即,可以将数据库
返回的结果直接转换为XML在浏览器中显示,而不必先保存至文件。下面的实例片段有力地说明了这一点:

<%
  Set rsData = Server.CreateObject("ADODB.Recordset")
  Response.ContentType="text/xml"
  rsData.Open "select * from clientList", "File Name=" & Server.MapPath("ado.udl")
  rsData.Save Response, adPersistXML
  rsData.Close
  Set cConn = nothing
%>

(完)


--  作者:卷积内核
--  发布时间:8/12/2004 9:15:00 AM

--  
看了挺累的吧?休息一下吧,有好的再发。
--  作者:tiger_ahu
--  发布时间:12/19/2004 4:42:00 PM

--  
老大,真强!!!佩服佩服!!!
看了你的笔记,收获很大!
--  作者:xmzhy
--  发布时间:3/22/2005 4:14:00 PM

--  
佩服
--  作者:hqh200023607
--  发布时间:11/10/2005 11:08:00 PM

--  
真的很佩服!非常感谢!!
--  作者:yishui
--  发布时间:11/12/2005 5:01:00 PM

--  
ganxie
--  作者:xinq
--  发布时间:11/21/2005 11:39:00 AM

--  
辛苦了,谢谢!
--  作者:leniz
--  发布时间:11/21/2005 9:46:00 PM

--  
支持呀。

--  作者:skycore
--  发布时间:1/11/2006 11:00:00 AM

--  
呵呵,刚刚能明白一点
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
62.988ms