document 函数
提供从 XSLT 样式表中检索由输入流提供的初始数据以外的其他 XML 资源的方法。
node-set document(object, node-set?)
备注
document()
函数的作用根据所提供的参数的类型和数目而有所不同。
如果只提供了一个参数,并且该参数为字符串,
document()
将该字符串作为 URL 对待,将文档作为一组节点进行检索。 有关代码说明,请参见下面的示例 1。如果只提供了一个参数,并且该参数为节点集,则该节点集中的每个节点将被作为 URL 对待,函数将返回所有引用的文档的联合。 有关代码说明,请参见下面的示例 2。
如果提供了两个参数,第一个参数可以是字符串或节点集,而第二个参数必须是节点集。 如果提供了第二个参数,用于指示第一个参数的内容相对于的基 URL。 有关代码说明,请参见下面的示例 3。
如果空字符串传递给
document()
函数,结果是 XSLT 文档本身的源 XML,除非提供了第二个参数(并且不为空)。 在后一种情况下,文档的 URL 是第二个元素中包含的节点的基 URL。
如果使用 document()
函数从 ASP 页中下载 XML 文档,并且该函数使用绝对 URL 作为参数,必须先在存放 XSLT 样式表的 DOM 对象上将 ServerHTTPRequest
属性设置为 true
,然后才能进行转换,如下面的 JScript 代码片断中所示:
xsltDom.setProperty("ServerHTTPRequest", true);
这样做的原因是 MSXML 使用 URLMON.dll 作为支持文件下载的默认设置。 但是,ASP 不支持 URLMON。 因此,需要将此属性设置为选择 WinHTTP.dll 作为支持下载的备选设置。
示例 1
在此示例中,XSLT 样式表 (document.xsl) 执行下列步骤:
使用
document()
函数下载源 XML 文档 (document.xml) 中引用的两个 XML 文档(hrGroup.xml 和 myGroup.xml)。从下载的文档中提取
<group>
元素。将提取的元素插入生成的 XML 文档。
转换的结果是解析 document.xml 中的引用。 如果使用相对路径引用外部 XML 文档,基 URL 是 XSLT 样式表的基 URL。
如果在 ASP 页 (document.asp) 中通过脚本进行转换,ServerHTTPRequest
属性设置为 true
。 如果在 JScript (document.js) 中开始转换并在 Windows 脚本宿主或 HTML 页中执行,则不需要这样做。 此处使用的是 Windows 脚本宿主。
XML 文件 (document.xml)
引用的 XML 文件 1 (hrGroup.xml)
引用的 XML 文件 2 (myGroup.xml)
XSLT 文件 (document.xsl)
ASP 文件 (document.asp)
JScript 文件 (document.js)
尝试一下!
复制上面的代码示例,然后粘贴到本地驱动器的文件中。
使用指定的名称和扩展名保存文件。
在本地计算机的默认网站下创建一个新的虚拟目录,别名为 hr。 如果使用远程计算机作为 Web 服务器,在 document.xml 中的
href
属性值中将 localhost 更改为 Web 服务器的主机名。 如果使用现有的虚拟目录,将同一href
属性值中的 hr 更改为该目录的任意别名。 将 hrGroup.xml 文件移动到已成为 Web 服务器的虚拟目录的目录。从 Internet Explorer 浏览器窗口中打开以下 URL 的 ASP 页:
https://localhost/hr/document.asp
使用以下 Windows 脚本宿主命令运行 JScript 文件:
cscript document.js
输出
以下是处理器输出,为了清楚起见,增加了缩进。
示例 2
此示例说明使用节点集作为 document
函数的参数的效果。
XML 文件 (document1.xml)
XSLT 样式表 (document1.xsl)
尝试一下!
从 msdn.microsoft.com 下载 msxsl.exe(如果尚未下载)。
在命令提示符下,从保存 document1.xml 和 document1.xsl 的目录中运行以下命令:
msxsl document1.xml document1.xsl
输出
输出类似于上面的示例 1 中生成的输出。
示例 3
此示例显示在调用 document
函数时使用两个参数的效果。 第二个参数必须是节点集,作为第一个参数的基 URL。 如果没有第二个参数,第一个参数的基 URL 是 XSLT 文件的基 URL。
XSLT 样式表 (document2.xsl)
XML 文件 1 (b.xml)
XML 文件 2 (subDir/a.xml)
尝试一下!
将 document2.xsl 和 b.xml 保存到工作目录中。
从命令提示符下,在工作目录中键入以下命令:
msxsl.exe a.xml document2.xsl
输出
<?xml version="1.0" encoding="UTF-8"?>
<root>
<!-- One Argument >
<a> one </a>
<a> two </a>
<a> three </a>
<!-- Two Arguments >
<a> I </a>
<a> II </a>
<a> III </a>
</root>