javascript - when - xslt value of




XSLT Javascript 확장 함수가 노드 집합을 반환하도록 만드는 방법은 무엇입니까? (2)

노드를 반환하려면 DOM 인터페이스를 사용하여 직접 노드를 만들어야합니다. 난 네가 자바 스크립트 함수에서 DOM NodeList를 반환하면 XPath 노드 집합으로 호출되는 XPath 코드에 의해 처리 될 것이라고 생각한다. (메모리에서) 노드와 문서의 중복 순서에 대한 세부 사항을주의 깊게 확인해야하지만 처리됩니다.

XSLT java 또는 javascript 확장에 대한 질문은 여기에 표준이 없기 때문에 어떤 제품에 대해 이야기하고 있는지 말해야합니다.

자바 스크립트에서 작성된 XSLT 1.0에서 확장 기능을 사용하는 간단한 방법이 노드 집합을 반환합니까?
이 새로운 자바 클래스를 만들 수 있지만, 스크립트 자체에 몇 가지 코드를 넣고 싶습니다.
모든 또는 대부분의 XSLT 프로세서에서 지원하는 다른 스크립팅 언어 (VB 스크립트? Groovy? C #?)에서이 작업을 수행 할 수 있다면 물론 좋습니다.

다음과 같은 간단한 스크립트가 있습니다.

<msxsl:script language="JScript" implements-prefix="custom">
    function xml (input) {
        var x = input.split(";");
        return x.toString();
    }
</msxsl:script>

따라서 문자열을 반환하므로 Xpath 표현식에서 함수를 호출하는 데 아무런 문제가 없습니다.
내가 갖고 싶은 것은 노드 집합 결과입니다. 하지만 내 대본을

<msxsl:script language="JScript" implements-prefix="custom">
    function xml (input) {
        var x = input.split(";");
        return x;
    }
</msxsl:script>

배열이 자동으로 노드 집합으로 변환되지 않기 때문에이 함수를 호출하면 오류가 발생합니다.

array-with-java-xslt-extensions를 살펴 봤지만, 지금은 이것을 피하기 위해 새로운 클래스를 만드는 것이 더 중요합니다.

그렇다면 어떤 문을 스크립트에 추가하여 배열을 노드 집합으로 변환하고 Xpath 표현식에서 함수 호출을 사용할 수 있도록해야합니까?


다음은 XSLT의 스크립트가 확장 기능을 구현할 수있는 모드에서 실행되는 한 MSXML 6에서 작동해야하는 예제 입니다. 스타일 시트 코드는 다음과 같습니다.

<xsl:stylesheet
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  version="1.0"
  xmlns:ms="urn:schemas-microsoft-com:xslt"
  xmlns:my="http://example.com/my"
  exclude-result-prefixes="ms my">

  <xsl:output method="html" version="5.0"/>

  <ms:script language="JScript" implements-prefix="my">
  <![CDATA[
  function tokenize (input) {
    var doc = new ActiveXObject('Msxml2.DOMDocument.6.0');
    var fragment = doc.createDocumentFragment();
    var tokens = input.split(';');
    for (var i = 0, l = tokens.length; i < l; i++)
    {
      var item = doc.createElement('item');
      item.text = tokens[i];
      fragment.appendChild(item);
    }
    return fragment.selectNodes('item');
  }
  ]]>
  </ms:script>

  <xsl:template match="/">
    <html>
      <head>
        <title>Example</title>
      </head>
      <body>
        <h1>Example</h1>
        <ul>
          <xsl:apply-templates select="my:tokenize('Kibology;for;all')"/>
        </ul>
      </body>
    </html>
   </xsl:template>

   <xsl:template match="item">
     <li>
       <xsl:value-of select="."/>
     </li>
   </xsl:template>

</xsl:stylesheet>






node-set