2

XSLT 1.0を拡張して、 http://www.w3schools.com/Xpath/xpath_functions.aspのfn関数名前空間の関数を使用できるようにするにはどうすればよいか疑問に思いました。

システムはこれからMSXMLXSLTプロセッサを使用していると言われました。私のスタイルシートはすべて2.0で書かれています...だから今はスタックですが、何も機能しておらず、たとえばfn名前空間の関数をどのように使用できるかわかりません。

これらの機能をたくさん使っているので、どういうわけかXSLT1.0を拡張できるのではないかと思っていました。または私は今何をしますか?私は絶対に迷い、イライラしています。

本当に助けていただければ幸いです!

どうもありがとう!

4

2 に答える 2

3

プロセッサとして MSXML を使用している場合は、Obalix の回答のオプション 2 を使用するしかないと思いますが、おそらく拡張機能を自分で作成する必要があります。

以下は、Upper Case 関数を実行する方法の例です。これは、XSLT 内で JavaScript を使用して機能を実行します。

<?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="javascript" implements-prefix="user">
   function uppercase(textToConvert) 
   {
      return textToConvert.toUpperCase();
   }
</msxsl:script>

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

</xsl:stylesheet>

あなたができることは、すべてのスクリプト関数を独自の XSLT シートに入れ、それをすべての独自の XSLT スタイルシートに含めることです。

これがどれほど複雑になるかは、使用した XPath2.0 関数の数によって異なります。

于 2010-02-22T14:17:47.837 に答える
2

まあ、私見、あなたは少し立ち往生しています。MSXML は、XSLT 2.0 および XPath 2.0 を実装していません。したがって、基本的には次の 3 つのオプションが残されます。

  1. Saxon.NET のような別の XSLT プロセッサのサポートを提供する必要があることを上司に納得させるようにしてください。
  2. Microsoft の msxsl:script 関数を使用して、必要なすべての関数を再実装します。これは難しいことがわかり、Microsoft パーサーに依存することになります。さらに、XPath 関数のみを変換します。XSLT 2.0 の機能はここでは考慮されません。
  3. XSLT 1.0 を使用してスタイルシートを再実装します。

個人的には、オプション 1 と 3 のみが実行可能であると思います。

于 2010-02-22T13:43:13.170 に答える