了解如何在 Dreamweaver 中执行服务器端 XSL 转换。 创建 XSLT 页面并将 HTML 转换为 XSLT 页面。
用户界面已经在 Dreamweaver 和更高版本中做了简化。 因此,您可能在 Dreamweaver 和更高版本中找不到本文中描述的一些选项。 有关详细信息,请参阅此文章。
执行服务器端 XSL 变换的工作流程
您可以在服务器上执行服务器端 XSL 变换。在构建显示 XML 数据的页面之前,请阅读有关服务器端和客户端 XSL 变换以及在网页中使用 XML 和 XSL 的信息。
必须正确配置服务器才能执行服务器端转换。 有关详细信息,请与您的服务器管理员联系。
执行服务器端 XSL 变换的一般工作流程如下(每个步骤在其他主题中都有描述):
1. 设置 Dreamweaver 站点。
2. 选择服务器技术并设置应用程序服务器。
3. 测试应用程序服务器。
例如,创建一个需要处理的页面,并确保应用程序服务器能够处理该页面。
4. 创建 XSLT 片段或页面,或将 HTML 页面转换为 XSLT 页面。
在您的 Dreamweaver 站点中,创建 XSLT 片段或完整的 XSLT 页面。
将现有 HTML 页面转换为整个 XSLT 页面。
5. 将 XML 数据源附加到页面。
6. 通过将数据绑定到 XSLT 片段或整个 XSLT 页面来显示 XML 数据。
7. 如果适用,请向包含 XML 数据占位符的表格或表格行添加重复区域 XSLT 对象。
8. 插入引用。
要在动态页面中插入对 XSLT 片段的引用,请使用 XSL 变换服务器行为。
要在动态页面中插入对整个 XSLT 页面的引用,请删除动态页面中的所有 HTML 代码,然后使用 XSL 变换服务器行为。
9. 发布页面和片段。
将动态页面和 XSLT 片段(或整个 XSLT 页面)都发布到您的应用程序服务器。如果您使用的是本地 XML 文件,则还需要发布该文件。
10. 在浏览器中查看动态页面。
当您这样做时,应用程序服务器会变换 XML 数据,将其插入到动态页面中,并在浏览器中显示。
创建 XSLT 页面
您可以创建 XSLT 页面,用于在网页上显示 XML 数据。您可以创建完整的 XSLT 页面(包含 <body> 标记和 <head> 标记的 XSLT 页面),也可以创建 XSLT 片段。当您创建 XSLT 片段时,您创建的是一个独立文件,该文件不包含 body 或 head 标记,只是一段简单的代码,稍后会插入到动态页面中。
如果从现有 XSLT 页面入手,则需要将 XML 数据源附加到该现有页面。
选择 XSLT(整个页面)以创建完整的 XSLT 页面。
选择 XSLT(片断)创建 XSLT 片断。
- 选择“附加本地文件”,单击“浏览”按钮,浏览至计算机上的本地 XML 文件,然后单击“确定”。
- 选择“附加远端文件”,输入 Internet 上某个 XML 文件(如来自 RSS 源)的 URL,然后单击“确定”。
单击“取消”按钮将生成一个新的 XSLT 页面,页面中没有附加的 XML 数据源。
“绑定”面板由 XML 数据源的架构填充
下表说明了架构中可能出现的各种元素:
Element |
表示 |
详细信息 |
|---|---|---|
<> |
必需的非重复性 XML 元素 |
在其父节点中刚好出现一次的元素 |
<>+ |
重复的 XML 元素 |
在其父节点中出现一次或多次的元素 |
<>+ |
可选 XML 元素 |
在其父节点中出现零次或多次的元素 |
粗体的元素节点 |
当前上下文元素 |
当插入点在重复区域中时,通常为重复元素 |
@ |
XML 属性 |
|
将 HTML 页面转换为 XSLT 页面
您还可以将\n现有 HTML 页面转换为 XSLT 页面。例如,如果您有一个预设计的静态页面,并且想要向其添加 XML 数据,则可以将该页面转化为 XSLT 页面,而不是创建 XSLT 页面并从头开始重新设计该页面。
将在“文档”窗口中打开页面的副本。 新\n页面是一个 XSL 样式表,以 .xsl 扩展名保存。
附加 XML 数据源
如果您要从现有 XSLT\n页面开始,或者如果您在使用 Dreamweaver 创建\n新 XSLT 页面时不附加 XML 数据源,您必须\n使用"绑定"面板附加 XML 数据源。
您还可以单击“绑定”面板右上角的“源”链接,添加 XML 数据源。
选择"附加本地文件",单击"浏览"\n按钮,浏览到您计算机上的本地 XML 文件,然后单击"确定"。
选择"附加远程文件",然后输入\nInternet 上的 XML 文件的 URL(例如来自 RSS 动态的文件)。
"绑定"面板中填充了您的\nXML 数据源的架构。
在 XSLT 页面中显示 XML 数据
在创建 XSLT 页面并附加 XML 数据源后,您可以将数据绑定到页面。为此,您需要向页面添加 XML 数据占位符,然后使用 XPath 表达式生成器或属性检查器来格式化将在页面上显示的选定数据。
在大多数情况下,您使用"重复区域 XSLT"对象在页面上显示重复的 XML 元素。在这种情况下,您可能希望创建包含一列或多列的单行表格,或者如果您希望包含表格页眉,则创建双行表格。
页面上会出现 XML 数据占位符。占位符会高亮显示并显示在大括号中。它使用 XPath(XML 路径语言)语法来描述 XML 架构的层次结构。例如,如果您将子元素 title 拖动到页面,而该元素具有父元素 rss、channel 和 item,那么动态内容占位符的语法将为 {rss/channel/item/title}。
双击页面上的 XML 数据占位符以打开 XPath Expression Builder。XPath Expression Builder 允许您格式化选定的数据,或从 XML 架构中选择其他项目。
使用“在浏览器中预览”预览工作时,Dreamweaver 执行内部 XSL 转换而不使用应用程序服务器。
显示重复 XML 元素
重复区域 XSLT 对象允许您在网页中显示来自 XML 数据源的重复元素。例如,如果您要显示动态信息馈送中的文章标题和描述,而该动态信息馈送包含 10 到 20 篇文章,XML 文件中的每个标题和描述可能都是重复元素的子元素。
设计视图中包含 XML 数据占位符的任何区域都可以更改为重复区域。但是,最常见的区域是表格、表格行或\n一系列表格行。
所选内容可以是任何内容,包括表格、表格行,甚至是一段文本。
若要精确选择页面上的区域,可以使用“文档”窗口左下角的标签选择器。 例如,如果区域是表格,则在页面上单击表格内部,然后在标签选择器中单击该标签。
选择"插入">"XSLT 对象">\n"重复区域"。
在"插入"面板的 XSLT 类别中,单击\n"重复区域"按钮。
在文档窗口中,重复区域周围会显示细的、带选项卡的灰色轮廓。当您在浏览器中预览您的作品时\n("文件">"在浏览器中预览"),灰色轮廓会消失\n,选区会展开以显示 XML 文件中指定的重复元素。
当您将重复区域 XSLT 对象添加到页面时,文档窗口中的 XML 数据占位符会被截断。这是因为 Dreamweaver 截断了\nXML 数据占位符的 XPath,使其相对于\n重复元素的路径。
设置重复区域 (XSL) 属性
在"属性"检查器中,您可以选择\n不同的 XML 节点来创建重复区域。
编辑重复区域 XSLT 对象
将重复区域 XSLT\n对象添加到区域后,您可以使用"属性"检查器对其进行编辑。
在动态页面中插入 XSLT 片段
创建\nXSLT 片段后,您可以使用\nXSL 转换服务器行为将其插入到动态网页中。当您将服务器\n行为添加到页面并在浏览器中查看页面时,应用程序\n服务器将执行转换,显示来自\n所选 XSLT 片段的 XML 数据。Dreamweaver 支持对 ColdFusion、ASP 或 PHP 页面进行 XSL 转换。
如果想要在动态页中插入整个 XSLT 页面的内容,过程完全相同。 在使用 XSL 转换服务器行为插入整个 XSLT 页面之前,请删除动态页中的所有 HTML 代码。
插入 XSLT 片断时,在页面上放置插入点后应始终单击“显示“代码”视图和“设计”视图”按钮,以确保插入点位于正确位置。 如果插入点没有位于正确位置,则可能需要单击“代码”视图中的其它位置,以将插入点放到需要的位置。
Dreamweaver 会在下一个文本字段中填充附加到指定片段的 XML 文件的文件路径或 URL。若要更改它,请单击"浏览"按钮并浏览到另一个文件。
还会在网站的根文件夹中创建一个 includes/MM_XSLTransform/ 文件夹,其中包含运行时库文件。应用程序服务器使用此文件中定义的函数来执行变换。
从动态页面中删除 XSLT 片段
您可以通过删除用于插入片段的 XSL 变换服务器行为,从页面中移除 XSLT 片段。删除服务器\n行为仅删除 XSLT 片段,不会删除关联的\nXML、XSLT 或运行时库文件。
应始终以此方式删除服务器行为。 手动删除生成的代码虽然会使服务器行为从“服务器行为”面板消失,但是仅删除部分服务器行为。
编辑 XSL 转换服务器行为
将 XSLT 片段添加到动态 web 页面后,您可以随时编辑\nXSL 转换服务器行为。
创建动态链接
您\n可以在 XSLT 页面上创建动态链接,当用户点击 XML 数据中的指定词汇或词组时,该链接会链接到特定的\nURL。有关完整说明,请参阅位于 www.adobe.com/go/dw_documentation 的 Dreamweaver 勘误表。
将样式应用到 XSLT 片断
创建完整的\nXSLT 页面(即包含 <body> 和 <head> 标记的 XSLT 页面)时,\n您可以在页面上显示 XML 数据,然后使用"属性"检查器或"CSS\n样式"面板像格式化任何其他内容一样格式化数据。但是,当您创建用于插入动态页面的 XSLT 片段时(例如,用于插入 ASP、PHP 或 Cold Fusion 页面的片段),片段和动态页面中的样式渲染会变得更加复杂。虽然您单独处理 XSLT 片段而非动态页面,但重要的是要记住,该片段旨在动态页面内使用,并且 XSLT 片段的输出最终位于动态页面的 <body> 标记内的某处。考虑到这一工作流程,务必确保您\n不在 XSLT 片段中包含 <head> 元素(例如样式\n定义或指向外部样式表的链接)。这样做\n会导致应用程序服务器将这些元素放置到\n动态页面的 <body> 中,从而生成\n无效的标记。
例如,您可能希望创建一个 XSLT 片段以便插入\n到动态页面中,并使用与该动态页面相同的外部\n样式表对该片段进行格式化。如果您将同一样式表\n附加到该片段,生成的 HTML 页面将包含指向该样式表的重复链接\n(一个在动态页面的 <head> 部分\n中,另一个在页面的 <body> 部分\n中,即 XSLT 片段内容出现的位置)。您应该使用设计时样式表来引用\n外部样式表,而不是采用这种方法。
格式化 XSLT 片段内容时,使用以下\n工作流程:
首先,将外部样式表附加到动态页。 (这是将样式应用于任何网页的内容的最佳做法)。
其次,将同一外部样式表作为设计时样式表附加到 XSLT 片断。 顾名思义,设计时样式表只在 Dreamweaver 的设计视图中有效。
完成前两个步骤之后,可使用已附加到动态页上的同一样式表在 XSLT 片断中创建新样式。 HTML 输出将更加清晰(因为对样式表的引用仅在 Dreamweaver 中使用时有效),片断仍在设计视图中显示相应的样式。 另外,在“设计”视图中查看动态页或在浏览器中预览动态页时,所有样式都将应用于片断和动态页。
如果在浏览器中预览 XSLT 片断,则浏览器将不显示样式。 应改为在浏览器中预览动态页,以在动态页的上下文中查看 XSLT 片断。
使用参数进行 XSL 转换
在将 XSL 转换服务器行为\n添加到网页时,您可以为 XSL 转换定义参数。参数控制如何处理和\n显示 XML 数据。例如,您可以使用参数来识别并\n列出动态信息馈送中的特定文章。当页面在\n浏览器中加载时,只会显示您使用参数指定的文章。
向 XSL\n转换添加 XSLT 参数
如果您希望使用静态值,请在"值"框中输入\n该值。
如果您希望使用动态值,请单击"值"框旁边的动态\n图标,完成"动态数据"对话框,\n然后单击"确定"。有关更多信息,请单击\n"动态数据"对话框中的"帮助"按钮。
编辑 XSLT 参数
删除 XSLT 参数
创建和编辑条件 XSLT 区域
您可以在 XSLT 页面上创建简单的条件区域或多个条件区域。您可以在"设计"视图中选择一个元素\n并对所选内容应用条件区域,或者可以在文档中插入点位置\n插入条件区域。
例如,\n如果您希望在商品不可用时在商品价格旁边显示"不可用"字样,您可以在页面上键入\n文本"不可用",选择该文本,然后对选择的文本应用条件\n区域。Dreamweaver 在\n选择内容周围添加 <xsl:if> 标记,仅当数据匹配\n条件表达式条件时,才会在页面上显示\n"不可用"字样。
应用条件 XSLT 区域
您可以编写一个简单的条件表达式并将其插入到 XSLT 页面中。如果在打开\n"条件区域"对话框时选择了内容,该内容将被包装在\n<xsl:if> 块中。如果您没有选择内容,<xsl:if> 块将添加到页面上的插入点。建议使用对话\n框开始操作,然后在代码视图中自定义表达式。
<xsl:if> 元素\n类似于其他语言中的 if 语句。\n该元素为您提供了一种方式来测试条件并根据\n结果采取相应的操作。<xsl:if> 元素\n允许您测试表达式的单一真假值。
在以下示例中,您想要测试上下文节点的 @available 属性值是否为 true。
以下代码将插入 XSLT 页面中:
<xsl:if test="@available='true'">
此处为内容
</xsl:if>
您必须将字符串值(如 true)用引号引起来。 Dreamweaver 为您编码引号 ('),以便将其作为有效的 XHTML 输入。
除了测试节点的值外,您还可以\n在任何条件语句中使用任何支持的 XSLT 函数。\n为 XML 文件中的当前节点测试条件。 在以下示例中,您想要测试结果集中的最后一个节点:
有关\n编写条件表达式的更多信息和示例,请参见参考\n面板中的 <xsl:if> 部分(帮助 > 参考)。
应用多个条件 XSLT\n区域
您可以编写简单的条件表达式\n插入到 XSLT 页面中。如果在打开\n"条件区域"对话框时选择了内容,该内容将被包装在 <xsl:choose> 块中。\n如果您没有选择内容,<xsl:choose> 块\n将添加到页面上的插入点。建议先使用对话框开始设置,然后在代码视图中自定义表达式。
<xsl:choose> 元素\n类似于其他语言中的 case 语句。\n该元素为您提供了一种方式来测试条件并根据\n结果采取相应的操作。<xsl:choose> 元素\n允许您测试多种条件。
在下面的示例中,您想要测试上下文节点的 price 子元素是否小于 5。
在示例中,以下代码会插入到您的 XSLT 页面中:
<xsl:choose>
<xsl:when test=\"price<5\">
此处为内容
</xsl:when>
<xsl:otherwise>
此处为内容
</xsl:otherwise>
</xsl:choose>
指定条件并单击"确定"后,另一个 <xsl:when> 标记\n会插入到 <xsl:choose> 块中。
有关\n编写条件表达式的详细信息和示例,\n请参阅"参考"\n面板中的 <xsl:choose> 部分("帮助">"参考")。
设置条件区域 (If) 属性
"设置条件区域"\n属性检查器的用途是更改 XSL 页面中条件\n区域使用的条件。条件区域测试条件\n并根据结果执行相应操作。
设置条件 (When) 属性
"设置条件区域"\n属性检查器的用途是更改 XSL 页面中多重\n条件区域使用的条件。多重条件区域\n测试条件并根据结果执行相应操作。
插入 XSL 注释
您可以向文档添加 XSL 注释\n标记,或者可以将选择的内容用 XSL 注释标记括起来。
向文档添加 XSL 注释标签
在"设计"视图中,选择"插入">\n"XSLT 对象">"XSL 注释",输入注释的\n内容(或将该框留空),然后单击"确定"。
在"代码"视图中,选择"插入">"XSLT 对象">\n"XSL 注释"。
您也可以单击"插入"面板的 XSLT 类别中的"XSL 注释"\n图标。
将选择的内容用 XSL 注释\n标记括起来
使用 XPath 表达式生成器\n为 XML 数据添加表达式
XPath(XML 路径语言)是一种非 XML 语法\n用于定位 XML 文档的各个部分。它主要用作 XML 数据的查询语言,就像 SQL 语言用于查询数据库一样。有关 XPath 的更多信息,请参阅 W3C 网站上的 XPath 语言规范 www.w3.org/TR/xpath。
XPath 表达式生成器是 Dreamweaver 的一项功能,可让您构建简单的 XPath 表达式来标识特定的数据节点和重复区域。使用\n此方法而不是从 XML 架构树中拖拽值的优势\n在于您可以格式化显示的值。当前上下文是根据 XPath 表达式生成器对话框打开时插入点在 XSL 文件中的位置来确定的。在 XML 架构树中,当前上下文以粗体显示。 当您在此对话框中进行选择时,系统会生成\n相对于您当前上下文的正确 XPath 语句。这\n简化了为初学者\n和高级用户编写正确 XPath 表达式的过程。
此功能是用于帮助您生成简单的 XPath 表达式以标识特定节点或重复区域。 它不允许您手动编辑表达式。 如果需要创建复杂的表达式,请使用此 XPath 表达式创建器开始创建表达式,然后在“代码”视图中或通过“属性”检查器自定义表达式。
创建 XPath 表达式以标识\n特定节点
正确的 XPath 表达式将写入"表达式"\n框中以标识该节点。
如果您在 XML 架构树中选择不同的节点\n,表达式将更改以反映您的选择。
在\n以下示例中,您希望显示 item 节点的 price 子元素:
此\n选择将在您的 XSLT 页面中插入以下代码:
<xsl:value-of select="price"/>
当您的节点值返回数字时,对选区进行格式化很有用。Dreamweaver 提供\n预定义的格式功能列表。有关可用格式功能和示例的完整列表,请参阅参考面板。
在\n以下示例中,您希望将 price 子元素\n格式化为带有两位小数的货币:
这些选项将在您的 XSLT 页面中插入以下代码:<xsl:value-of select="format-number(provider/store/items/item/price,'$#.00')"/>
有关选择节点以 返回值的更多信息和示例,请参阅参考面板中的 <xsl:value-of/> 部分。
选择要重复的节点
您可以选择要重复的节点,并可选择 筛选结果。在 XPath 表达式生成器对话框中,您选择的内容将包含在 <xsl:for-each> 块内。如果您未选择内容,<xsl:for-each> 块将在您的光标所在位置插入。
正确的 XPath 表达式写在"表达式"\n框中,用于标识节点。
重复项在 XML 架构树中用加号 (+) 符号标识。
在以下示例中,您需要重复 XML 文件中的每个 item 节点。
单击"确定"后,以下代码将插入到您的 XSLT 页面中:
<xsl:for-each select="provider/store/items/item">
此处为内容
</xsl:for-each>
在某些情况下,您可能希望处理重复节点的子集,例如,您可能只希望获取属性具有特定值的条目。在此情况下,\n您需要创建筛选条件。
筛选要重复的数据
使用筛选条件来识别具有特定属性值的重复节点。
筛选条件
指定包含您要作为筛选依据的数据的重复节点。弹出菜单提供了相对于您在 XML 架构树中选择的节点的\n上级节点列表。
位置
指定"筛选依据"\n节点的属性或子元素,该属性或子元素将用于限制结果。您可以从弹出菜单中选择属性或子元素,也可以在此字段中输入您自己的 XPath 表达式来识别架构树中更深层的子元素。
运算符
指定筛选条件表达式中使用的\n比较运算符。
值
指定要在“筛选条件”节点中检查的值。 输入值。 如果为您的 XSLT 页面定义了动态参数,您可以从弹出菜单中选择一个。
当您在弹出菜单中输入值或进行选择时,表达式框中的 XPath 表达式将发生变化。
在以下\n示例中,您要将结果集限制为 @available 属性值为 true 的 item 节点。
当您\n单击"确定"时,以下代码将插入到您的 XSLT 页面中:<xsl:for-each select=\"provider/store/items/item[@available = 'true']\"> \n Content goes here \n</xsl:for-each>
您需要将字符串值(如 true)用引号引起来。 Dreamweaver 为您编码引号 ('),以便将其作为有效的 XHTML 输入。
您可以创建更复杂的筛选条件,允许您\n将父节点指定为筛选条件的一部分。在以下示例中,您希望将结果集限制为那些 item 节点,其中 store 的 @id 属性等于 1,并且 item 的 price 节点大于 5。
当您\n单击"确定"时,以下代码将插入到您的 XSLT 页面中:<xsl:for-each select=\"provider/store[@id = 1]/items/item[price > 5]\"> \n Content goes here \n</xsl:for-each>
有关重复区域的更多信息和\n示例,请参阅面板中的 <xsl:for-each> 部分\n。