以文本方式查看主题

-  W3CHINA.ORG讨论区 - 语义网·描述逻辑·本体·RDF·OWL  (http://bbs.xml.org.cn/index.asp)
--  『 XML 与 数据库 』  (http://bbs.xml.org.cn/list.asp?boardid=17)
----  转换数据  (http://bbs.xml.org.cn/dispbbs.asp?boardid=17&rootid=&id=13253)


--  作者:yibingzheng
--  发布时间:1/4/2005 5:36:00 PM

--  转换数据
前面我们讨论了将数据(或 Access 对象)及其在 Access 中的属性和特征导出至 XML 文件。假设您要将数据(或对象)“转换”为另一种格式,例如,为了在 Web 浏览器中显示。要实现此目的,您可能希望通过筛选或排序重新设置数据结构,并通过添加 HTML 标记来告诉浏览器如何显示这些数据。您可以通过将 HTML 标记添加至 .xml 文件并重新排列数据来手动完成,这将是一项相当繁琐的任务,您也可以使用另一种基于 XML 类型的文件来进行转换:XSL 转换 (XSLT) 文件。

XSLT 文件(XSLT 命令是 XSL 命令的子集)主要用于将一个 XML 文档转换为另一个 XML 文档。这话并不十分贴切,因为 XSLT 也很适合于将 XML 转换为 HTML 或其他基于文本的格式。

XSL 和 XSLT 之间的区别是什么呢?XSL 文件定义 XML 文档在屏幕、打印机或其他显示设备上的格式和外观。XSLT 文件实际执行转换。

完成文档转换的过程如下:

在 Access 以外使用文本编辑器(例如 Microsoft 记事本)创建 XSLT 文件(与 XSL 一样扩展名为 .xsl)。在此文件中,根据需要添加处理指令以转换和重新设置数据的结构。对于您希望输出文档中包含的每一个或每一组(分枝)元素,都需要处理指令。
添加从 XML 数据文件(.xml 文件)内指向 XSLT 文件的引用标记。
使用 XSLT 处理器将 XSLT 样式表应用于 XML 数据文件。这将会生成所需的输出文件(.htm 文件)。
有多种 XSLT 处理器可供使用,其中包括 Microsoft MSXML3 处理器,您可以从 Microsoft Developer Network (MSDN) 网站免费下载它。要运行以下示例,您需要在硬盘上安装 MSXML3 处理器。

XSLT 如何工作?
与 XSL 一样,XSLT 使用模板和指令,在 XML 数据文件中遇到一个特殊元素或元素分枝时,这些模板和指令被触发。模板指令定位数据文件的元素,并指定处理什么样的输出。大多数模板主体都包括 HTML 标记和要输出的文本。指令命令告诉处理器要输出数据的哪个部分。指令处理的特殊元素或元素分枝按照数据将要输出的顺序放置,而不管 XML 数据文件中元素的实际顺序。它提供了重新设置数据结构以满足您的需要的方法。条件编程指令允许您对数据进行筛选和排序。这些技巧的组合提供了强大的工具,使您可以将 XML 数据转换为任何格式。

为了让您对活动中的默认 .xsl 样式表有一个初步印象,我们将使用 Microsoft Internet Explorer 来查看从 Access 罗斯文贸易示例数据库中导出的文件。

打开罗斯文示例数据库。对于 Access 2003,Northwind.mdb 数据库的默认位置为 C:\Program Files\Microsoft Office\Office11\Samples;对于 Access 2002,默认位置是 C:\Program Files\Microsoft Office\Office10\Samples。
将“雇员”表导出为 XML 文档。有关导出为 XML 的详细信息,请参阅 Access 帮助。
找到 Employees XML 文件 (*.xml) 并双击该图标。
假设您的默认浏览器为 Internet Explorer,该文件将显示为带有可扩展元素分支的树结构。此树状结构是由 Internet Explorer 使用的 XSLT 文件创建的,用于转换数据。
Internet Explorer 的默认 XML 输出显示了扩展的数据区:


<?xml version="1.0" encoding="UTF-8" ?>
- <dataroot>
-   <Employees>

   <EmployeeID>1</EmployeeID>
   
   <LastName>Davolio</LastName>
   
   <FirstName>Nancy</FirstName>
   
   <Title>Sales Representative</Title>
    
   <TitleOfCourtesy>Ms.</TitleOfCourtesy>
   
   <BirthDate>1968-12-08T00:00:00</BirthDate>
   
   <HireDate>1992-05-01T00:00:00</HireDate>
   
   <Address>507 - 20th Ave. E. Apt. 2A</Address>
   
   <City>Seattle</City>
   
   <Region>WA</Region>
   
   <PostalCode>98122</PostalCode>
   
   <Country>USA</Country>
   
   <HomePhone>(206) 555-9857</HomePhone>   ....


这是导出的 Employees XML 数据文件的一部分:

<?xml version="1.0"
encoding="UTF-8"?>

   <dataroot>

    <Employees>

      <EmployeeID>1</EmployeeID>
      
      <LastName>Davolio</LastName>
      
      <FirstName>Nancy</FirstName>
      
      <Title>Sales Representative</Title>
      
      <TitleOfCourtesy>Ms.</TitleOfCourtesy>
      
      <BirthDate>1968-12-08T00:00:00</BirthDate>
      
      <HireDate>1992-05-01T00:00:00</HireDate>
      
      <Address>507 - 20th Ave. E. Apt.
2A</Address>

      <City>Seattle</City>
      
      <Region>WA</Region>
      
      <PostalCode>98122</PostalCode>
      
      <Country>USA</Country>
      
      <HomePhone>(206) 555-9857</HomePhone>
      
      ...
      <ReportsTo>5</ReportsTo>    </Employees>   </dataroot>


现在让我们看一个简单的 XSLT 文件示例。此文件可用于显示在先前创建的 Employees XML 数据文件的第一个记录中选择的字段。之后,您将看到您自行对其进行测试的步骤。

用于显示“雇员”表中第一个记录的 XSLT 文件

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<HTML>
<BODY>
<h4>First record of the Employees table</h4>
<p><xsl:value-of select="//EmployeeID"/></p>
<p><xsl:value-of select="//TitleOfCourtesy"/></p>
<p><xsl:value-of select="//FirstName"/></p>
<p><xsl:value-of select="//LastName"/></p>
<p><i><xsl:value-of select="//Title"/></i></p>
<p><xsl:value-of select="//HomePhone"/></p>
</BODY>
</HTML>
</xsl:template>
</xsl:stylesheet>

前两行包含所需的 XML 处理指令。
第一个模板规则告诉处理器在 XML 数据文件的起始处开始处理。“/”表示开始处理文档时立刻触发此规则。
要包括在输出 .htm 文档中的 HTML 标记的开始标记。
我们希望出现在输出文档顶部的 HTML 标题。
一组模板规则(查找选择语句中的元素标记并将那些标记的值输出到输出文档)的开始标记。值前面的“//”是导航符号,指示处理器 (MSXML3) 它需要向下走两个级别以到达所需的标记。 (例如,在 Employees XML 数据文件中,是文档元素“dataroot”,向下经过“Employees”元素,到达所需的“EmployeeID”元素。
对应结束标记的开始标记。每一个开始标记都必须有一个结束标记。

要测试此文件,您需要:

打开文本编辑器(例如记事本)。
将上述示例文件复制并粘贴到一个空的记事本文档中。注意,粘贴至文本编辑器后,在处理器中运行该文件前,您需要删除文件的蓝色背景标注。
将此文件保存到与您先前创建的 Employees XML 数据文件相同的位置。将文件命名为 MyTransformFile.xsl。 请确保包括 .xsl 扩展名。
用文本编辑器(例如记事本)打开 Employees XML 数据文件。
将光标置于文档第一行末尾,按 Enter。
将下列文本行复制并粘贴到新的空行中:
<?xml-stylesheet type="text/xsl" href="MyTransformFile.xsl"?>

此行告诉 Employees XML 文件使用您创建的样式表文件。保存 Employee XML 数据文件。
现在双击 Employee XML 数据文件将其打开。它应当在您的浏览器中打开,并仅显示“雇员”表中第一个记录的特定字段。
第一个 .xsl 文件示例的输出:

“雇员”表的第一个记录

1

Ms.

Nancy

Davolio

“销售代表”

(206) 555-9857

注意,输出中限制了所显示的字段的数量,并更改了字段在“雇员”表中的顺序(先是名,然后是姓)。在输出显示中,我们包括了原文档中没有的其他信息(文档标题)。同时也向“标题”元素中添加了其他格式,例如,PARAGRAPH (<p>) 标记和 ITALICIZED (<i>) 标记。

现在我们看另一个 .xsl 文件示例,它将显示 Employee XML 文件中所有记录的某些字段。

显示“雇员”表中所有记录的 XSLT 文件

<HTML xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xsl:version="1.0">
<BODY>
<h4>All records of the Employees table</h4>
<xsl:for-each select="//Employees">
<br><xsl:value-of select="EmployeeID"/></br>
<br><xsl:value-of select="TitleOfCourtesy"/></br>
<br><xsl:value-of select="LastName"/></br>
<br><xsl:value-of select="FirstName"/></br>
</xsl:for-each>
</BODY>
</HTML>

包含所需的 XML 处理指令,这一次将其组合以表明您可以将它们与 HTML 指令集成。
要包括在输出 .htm 文档中的 HTML 标记的开始标记。
第一个指令,它告诉处理器查找 Employees 标记。注意,这告诉处理器需要向下走两个级别来查找标记(根元素和“文档”元素“dataroot”)。
一组指令(定位选择语句中显示的标记并将那些标记的值输出到输出文档)的开始标记。
对应结束标记的开始标记。请记住,每一个开始标记都必须有一个对应的结束标记。

要运行此示例,您需要执行与第一个示例相同的步骤。请使用与您创建的第一个 .xsl 文件不同的名字保存此 XSLT 文件。请确保将 Employees XML 文件中的引用改为这个新的 .xsl 文件。请注意,将文本粘贴至文本编辑器后,从处理器中运行该文件前,您需要删除文件的蓝色背景标注 (  )。

双击 Employees XML 文件,您的浏览器将显示如下:

“雇员”表的第一个记录

1
Ms.
Davolio
Nancy
2
Dr.
Fuller
Andrew
3
Ms.
Leverling
Janet
...
9
Ms.
Dodsworth
Anne

在此输出中,我们通过在元素之间使用BREAK <br> HTML 标记,而不是PARAGRAPH <p> 标记来更改元素数据间距。我们选择输出比在第一个示例中更少的元素。我们也调换了名和姓的顺序。这些仅仅是转换数据时可用的一些技术。希望您能继续试验这些技术和其他技术,从而发现如何使用 XSL 和 XSLT 文件来创建您所需要的数据文件类型。


--  作者:yibingzheng
--  发布时间:1/4/2005 5:38:00 PM

--  
介绍了一些将 XML 数据、基于 XML 的文件(例如 XSLT 和 XSL)与 Access 配合使用方法,以便于移动和整理信息。以本文为起点,您应能够将这些示例扩展至您自己的应用程序和任务中。有关本文中任何概念的详细信息,请参阅 Microsoft Developers Network (MSDN) Web 站点。
欢迎大家共同探讨!
--  作者:xmzhy
--  发布时间:2/16/2005 9:43:00 AM

--  
能放例子就更好了。
--  作者:myway
--  发布时间:5/26/2005 5:30:00 PM

--  
"将“雇员”表导出为 XML 文档。有关导出为 XML 的详细信息,请参阅 Access 帮助。"


   其实这才是我想知道的呢,


--  作者:royczy
--  发布时间:8/30/2005 11:13:00 PM

--  
不错
--  作者:ksai
--  发布时间:9/2/2005 10:44:00 PM

--  
这个很简单吗,4楼的搂主。Access---〉xml可以使用ADO.NET的DataSet,再设置一些参数值就OK了。可以看ADO.NET这方面的书。
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
58.594ms