Share via


<msxsl:script> 요소

_XSLT 변환에 사용자 지정 함수를 사용할 수 있도록 스크립트 블록을 포함합니다. 이 요소는 최상위 요소입니다.

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

특성

  • language
    이 요소 내에 정의된 함수에 사용되는 액티브 스크립팅 언어입니다. 이 언어를 지정하지 않으면 ECMA 262 언어 사양과 호환되는 Microsoft JScript 가 사용됩니다. 이 특성에는 HTML <SCRIPT> 요소의 language 특성과 같은 값을 사용할 수 있습니다.

    관리되는 코드의 경우 CreateProvider에 사용할 수 있는 언어 이름을 이 특성에 사용할 수 있습니다.

  • implements-prefix
    필수 요소. 접두사를 스크립트 블록에 연결합니다. 이 특성 값은 네임스페이스를 나타내는 접두사입니다.

요소 정보

발생 횟수

제한 없음

부모 요소

xsl:stylesheet, xsl:transform

자식 요소

<msxsl:assembly> Element

<msxsl:using> Element

설명

<msxsl:script> 요소는 네임스페이스 urn:schemas-microsoft-com:xslt에 속합니다. 이 요소 내에서 변수를 선언하고 함수를 정의할 수 있습니다. 이 요소는 <xsl:stylesheet> 요소 내에 나타날 수 있습니다. 그러므로 중첩된 스크립트 블록은 전역 스크립트 블록으로 간주됩니다.

.NET Framework 내에서 관리되는 코드에 대해서만 <msxsl:assembly> 및 <msxsl:using> 자식 요소를 사용할 수 있습니다. 이 요소를 사용할 경우 이 요소는 스크립트 블록 시작 부분에서 모든 스크립트 코드 앞에 있어야 합니다.

비관리 코드에서는 <msxsl:script> 요소에 COM 개체를 인스턴스화할 수도 있습니다. 그러나 사용자의 보안 설정에서 스크립트가 클라이언트 쪽 개체를 인스턴스화하지 못하도록 지정했을 수 있습니다.

스크립트 블록을 사용하면 스크립트 엔진을 여러 번 로드해야 하므로 성능을 향상시키려면 XSLT 파일에서 스크립트 블록을 사용하지 마십시오. 대신 스크립트와 일치하는 COM 개체를 만들어 DLL을 생성합니다. 그런 다음 addObject를 사용하여 DLL을 전달합니다.

예제

다음 예제에서는 xml()라는 함수를 선언하는 user의 네임스페이스 접두사가 있는 스크립트 블록을 <msxsl:script>를 사용하여 정의하는 방법을 보여 줍니다. xml() 함수는 노드 목록을 인수로 사용합니다. <xsl:value-of>의 특성에서 select user 네임스페이스에 있는 xml(nodelist) 함수를 호출하는 방법에 유의해야 합니다.

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;