共用方式為


<msxsl:script> 元素

包含指令碼區塊,以便可在 XSLT 轉換中使用自訂函式。 這是最上層項目。

<msxsl:script
  language = "language-name"
  implements-prefix = "prefix of user's namespace">
</msxsl:script>

屬性

  • 語言
    用於此項目內定義之函式的 Active 指令碼語言。 如果留為未指定狀態,則會使用 Microsoft JScript (與 ECMA 262 語言規格相容)。 此屬性接受的值與 HTML <SCRIPT> 項目上的 language 屬性相同。

    針對 Managed 程式碼,此屬性會接受 CreateProvider 所接受的語言名稱。

  • implements-prefix
    必要項。 將前置詞與指令碼區塊相關聯。 這個屬性的值是表示命名空間的前置詞。

項目資訊

發生次數

無限制

父項目

xsl:stylesheetxsl:transform

項目子系

<msxsl:assembly> Element

<msxsl:using> Element

備註

<msxsl:script> 項目屬於命名空間 urn:schemas-microsoft-com:xslt。 您可以在此項目內宣告變數及定義函式。 此項目可出現在 <xsl:stylesheet> 項目中。 會將因此而巢狀化的指令碼區塊視為全域指令碼區塊。

<msxsl:assembly> 及 <msxsl:using> 項目子系僅可用於.NET Framework 內的 Managed 程式碼。 使用時,這些項目必須位於指令碼區塊的開始處,在任何指令碼之前。

在 Unmanaged 程式碼中,您還可以在 <msxsl:script> 項目中具現化 COM 物件。 但是,使用者的安全性設定可能會防止指令碼具現化用戶端物件。

若要取得高效能,應避免 XSLT 檔案的指令碼區塊,因為它們需要多次載入指令碼引擎。 反之,請建立與指令碼相當的 COM 物件來產生 DLL。 然後使用 addObject 並傳遞 DLL。

範例

此範例說明如何使用 <msxsl:script> 搭配 user 的命名空間前置詞來定義指令碼區塊,以宣告 xml() 函式。 xml() 函式將節點清單做為引數。 請注意,user 命名空間內的 xml(nodelist) 函式是如何從 <xsl:value-of> 的 select 屬性進行呼叫。

XML 檔 (customers.xml)

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="script.xsl" ?>
<customers>
   <customer>
      <name>John Smith</name>
      <address>123 Elm St.</address>
      <phone>(123) 456-7890</phone>
   </customer>
   <customer>
      <name>Mary Jones</name>
      <address>456 Oak Ave.</address>
      <phone>(156) 789-0123</phone>
   </customer>
</customers>

XSLT 檔 (script.xsl)

<?xml version='1.0'?>
<xsl:stylesheet version="1.0"
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
      xmlns:msxsl="urn:schemas-microsoft-com:xslt"
      xmlns:user="http://mycompany.com/mynamespace">

<msxsl:script language="JScript" implements-prefix="user">
   function xml(nodelist) {
      return nodelist.nextNode().xml;
   }
</msxsl:script>

<xsl:template match="/">
   <xsl:value-of select="user:xml(.)"/>
</xsl:template>

</xsl:stylesheet>

輸出

此為格式化輸出:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="script.xsl" ?>
<customers>
  <customer>
    <name>John Smith</name>
    <address>123 Elm St.</address>
    <phone>(123) 456-7890</phone>
  </customer>
  <customer>
    <name>Mary Jones</name>
    <address>456 Oak Ave.</address>
    <phone>(156) 789-0123</phone>
  </customer>
</customers>

此為處理器輸出:

<?xml version="1.0"?>&lt;?xml version="1.0"?&gt;&lt;?xml-stylesheet
type="text/xsl" href="script.xsl" ?&gt;&lt;customers&gt;
&lt;customer&gt;  &lt;name&gt;John Smith&lt;/name&gt;  
&lt;address&gt;123 Elm St.&lt;/address&gt;  &lt;phone&gt;(123) 456-
7890&lt;/phone&gt; &lt;/customer&gt; &lt;customer&gt;  &lt;name&gt;Mary 
Jones&lt;/name&gt;  &lt;address&gt;456 Oak Ave.&lt;/address&gt;  
&lt;phone&gt;(156) 789-0123&lt;/phone&gt; 
&lt;/customer&gt;&lt;/customers&gt;