共用方式為


document 函式

提供一個方法,從 XSLT 樣式表中擷取輸入資料流所提供的初始資料以外的其他 XML 資源。

node-set document(object, node-set?)

備註

document() 函式的效果會隨著您所提供的引數型別與數量而有所不同。

  • 若僅提供一個引數且該引數為字串,則 document() 會將此字串視為 URL,並將文件當作節點集來擷取。請參閱下面的範例 1,以檢視程式碼示範。

  • 若僅提供一個引數且該引數為節點集,則該節點集內的每個節點都會被視為 URL,且函式會傳回所有被參考文件的聯集。請參閱下面的範例 2,以檢視程式碼示範。

  • 若有兩個引數,則第一個引數可以是字串或節點集,而第二個引數必須是節點集。如果有提供第二個引數,則表示第一個引數內容的相對基底 URL。請參閱下面的範例 3,以檢視程式碼示範。

  • 若將空字串傳遞到 document() 函式中,除非指定了第二個引數 (且非 Null),否則結果即為 XSLT 文件本身的來源 XML。在第二個情況下,文件的 URL 即為第二個項目所含節點的基底 URL。

使用 document() 函式搭配絕對 URL 做為引數,從 ASP 頁面下載 XML 文件時,在具有 XSLT 樣式表的 DOM 物件上,必須將 ServerHTTPRequest 屬性設為 true,才能啟始轉換,如下列 JScript 程式碼片段所示:

xsltDom.setProperty("ServerHTTPRequest", true);

之所以如此,是因為 MSXML 會使用 URLMON.dll 做為預設值來支援檔案下載。但 ASP 並不支援 URLMON。因此,您必須設定此屬性以選擇 WinHTTP.dll 做為下載的替代方式。

範例 1

在此範例中,XSLT 樣式表 (document.xsl) 會執行下列步驟:

  1. 使用 document() 函式,下載兩份在來源 XML 文件 (document.xml) 中參考的 XML 文件 (hrGroup.xmlmyGroup.xml)。

  2. 從已下載的文件中擷取 <group> 項目。

  3. 將取出的項目插入結果 XML 文件中。

轉換的結果會解析 document.xml 中的參考。當相對路徑是用來參考外部 XML 文件時,基底 URL 即為 XSLT 樣式表的基底 URL。

當轉換是從 ASP 頁面 (document.asp) 中的指令碼啟動時,ServerHTTPRequest 屬性會設為 true。當轉換在 JScript (document.js) 中啟動,並於 Windows Scripting Host 或 HTML 頁面中執行時,並不需要作此設定。此處使用 Windows Script Host。

XML 檔 (document.xml)

<?xml version='1.0'?>
<groups>
   <groupRef href="http://localhost/hr/hrGroup.xml"/>
   <groupRef href="myGroup.xml"/>
</groups>

參考的 XML 檔 1 (hrGroup.xml)

<?xml version='1.0'?>
<group name="hr">
  <leader>mo</leader>
  <member>bo</member>
  <member>ko</member>
  <member>lo</member>
</group>

參考的 XML 檔 2 (myGroup.xml)

<?xml version='1.0'?>
<group name="my">
  <leader>john</leader>
  <member>jane</member>
  <member>jon</member>
  <member>jan</member>
</group>

XSLT 檔 (document.xsl)

<?xml version='1.0'?>
<xsl:stylesheet version="1.0"
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
    <groups>
        <xsl:apply-templates select="//groupRef"/>
    </groups>
</xsl:template>

<xsl:template match="groupRef">
    <xsl:copy-of select="document(@href)//group"/>
</xsl:template>

</xsl:stylesheet>

ASP 檔 (document.asp)

<%@ LANGUAGE = JScript %>
<%
  // Set the source and style sheet locations here.
  var sourceFile = Server.MapPath("document.xml");
  var styleFile = Server.MapPath("document.xsl");

  // Load the XML.
  var source = Server.CreateObject("Msxml2.DOMDocument.6.0");
  source.setProperty("AllowDocumentFunction", true);
  source.async = false;
  source.load(sourceFile);

  // Load the XSLT.
  var style = Server.CreateObject("Msxml2.DOMDocument.6.0");
  style.setProperty("AllowDocumentFunction", true);
  style.async = false;
  style.setProperty("ServerHTTPRequest", true);
  style.load(styleFile);

  Response.Write(source.transformNode(style));
%>

JScript 檔 (document.js)

// Set the source and style sheet locations here.
  var sourceFile = ("document.xml");
  var styleFile = ("document.xsl");

  // Load the XML.
  var source = new ActiveXObject("Msxml2.DOMDocument.6.0");
  source.setProperty("AllowDocumentFunction", true);
  source.async = false;
  source.load(sourceFile);

  // Load the XSLT.
  var style =new ActiveXObject("Msxml2.DOMDocument.6.0");
  style.setProperty("AllowDocumentFunction", true);
  style.async = false;
  style.load(styleFile);

  WScript.Echo(source.transformNode(style));

請嘗試

  1. 複製上述程式碼範例,並將其貼在本機磁碟機的檔案中。

  2. 以指定的名稱與副檔名儲存檔案。

  3. 在您本機的預設網站上,建立別名為 hr 的新虛擬目錄。若您使用遠端電腦做為 Web 伺服器,請在 document.xml 內的 href 屬性值中,將 localhost 變更為 Web 伺服器的主機名稱。若您使用現有的虛擬目錄,請將相同 href 屬性值中的 hr 變更為該目錄所有的任何別名。將 hrGroup.xml 檔案移至已成為 Web 伺服器虛擬目錄的目錄中。

  4. 在 Internet Explorer 瀏覽器視窗中,以下列 URL 開啟 ASP 頁面:

    http://localhost/hr/document.asp

  5. 使用下列 Windows Scripting Host 命令來執行 JScript 檔案:

cscript document.js

輸出

以下是處理器輸出,當中加入縮排以利檢視。

<?xml version="1.0"?>
<groups>
  <group name="hr">
    <leader>mo</leader>
    <member>bo</member>
    <member>ko</member>
    <member>lo</member>
  </group>
  <group name="my">
    <leader>john</leader>
    <member>jane</member>
    <member>jon</member>
    <member>jan</member>
  </group>
</groups>

範例 2

此範例說明使用節點集做為 document 函式之引數的結果。

XML 檔 (document1.xml)

<?xml version='1.0' encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="document1.xsl" ?>
<groups>
   <groupRef>hrGroup.xml</groupRef>
   <groupRef>myGroup.xml</groupRef>
</groups>

XSLT 樣式表 (document1.xsl)

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="xml" 
            version="1.0" 
            encoding="UTF-8" 
            indent="yes"/>

<xsl:template match="/">
    <groups>
        <xsl:apply-templates select="/groups/groupRef"/>
    </groups>
</xsl:template>

<xsl:template match="groups/groupRef">
    <xsl:copy-of select="document(.)//group"/>
</xsl:template>

</xsl:stylesheet>

請嘗試

  1. 若您尚未從 msdn.microsoft.com 下載 msxsl.exe,請下載之。

  2. 在命令提示字元中,從您用來儲存 document1.xmldocument1.xsl 的目錄中輸入下列命令:

msxsl document1.xml document1.xsl

輸出

此輸出類似於上述範例 1 所產生的輸出。

範例 3

此範例說明在呼叫 document 函式時使用兩個引數的結果。第二個引數必須是節點集,且會當作第一個引數的基底 URL。若未使用第二個引數,第一個引數的基底 URL 即為 XSLT 檔案的基底 URL。

XSLT 樣式表 (document2.xsl)

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
    
    <xsl:template match="/">
    <root>
        <xsl:comment>One Argument </xsl:comment>
        <xsl:for-each select="document('b.xml')//a">
            <xsl:copy-of select="."/>
        </xsl:for-each>

        <xsl:comment>Two Argument </xsl:comment>
        <xsl:for-each select="document('a.xml', .)//a">
            <xsl:copy-of select="."/>
        </xsl:for-each>
    </root>
    </xsl:template>
</xsl:stylesheet>

XML 檔案 1 (b.xml)

<doc>
 <a> one </a>
 <a> two </a>
 <a> three </a>
</doc>

XML 檔案 2 (subDir/a.xml)

<doc>
 <a> I </a>
 <a> II </a>
 <a> III </a>
</doc>

請嘗試

  1. document2.xslb.xml 儲存到工作目錄中。

  2. 從命令提示字元上,在工作目錄中輸入下列命令:

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>

請參閱

參考

<xsl:copy-of> 項目