2009-09-03 9 views
5

xsl:関数を使用してカスタムの文字列操作を追加する必要があるXSLスタイルシートがあります。しかし、私はドキュメントに関数を置く場所を見つけようとするのに問題があります。このようなXSLドキュメントにはどこにXSL機能を置くのですか?

マイXSL単純化されたルックス、

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" xmlns:my="myFunctions" xmlns:d7p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays" xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:import href="Master.xslt"/> 
    <xsl:template match="/"> 
    <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"> 
     <!-- starts actual layout --> 
     <fo:page-sequence master-reference="first"> 
     <fo:flow flow-name="xsl-region-body"> 
      <!-- this defines a title level 1--> 
      <fo:block xsl:use-attribute-sets="heading"> 
      HelloWorld 
      </fo:block> 
     </fo:flow> 
     </fo:page-sequence> 
    </fo:root> 
    </xsl:template> 
</xsl:stylesheet> 

そして、私は簡単な関数、と言うに入れたい、

<xsl:function name="my:helloWorld"> 
    <xsl:text>Hello World!</xsl:text> 
    </xsl:function> 

しかし、私は、機能をどこに置くかうまくいかないことができたときにIそれをノードの下に置くと、 'xsl:function'というエラーが 'xsl:stylesheet'要素の子になることはありません。、私はノードの下に置く場合、私は同様のエラーが発生します。

どこに機能を置くべきですか? Idealy私の関数を外部ファイルに入れて、それらをxslファイルにインポートしたいと思います。

答えて

18

XSLバージョン1.0にはxsl:functionはありません。名前付きテンプレート

<xsl:template name="helloWorld"> 
    <xsl:text>Hello World!</xsl:text> 
</xsl:template> 

(...) 

<xsl:template match="something"> 
    <xsl:call-template name="helloWorld"/> 
</xsl:template> 
+0

ありがとうPeirre!それがトリックでした。 – mattdlong

7

を作成する必要がありますが、2.0 にスタイルシートのバージョンをアップグレードすることができますそして、スタイルシート宣言で

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:func="http://www.**.com"> 

として指定**あなたの選択はあなたが以下のあなたの願い として何かを指定することができますこれはあなたの関数を指定

<xsl:function name="func:helloWorld"> 
    <xsl:text>Hello World!</xsl:text> 
</xsl:function> 

次にテンプレートで、あなたは

として使用することができます
<xsl:template match="/"> 
<xsl:value-of select="func:helloWorld"/> 
</xsl:template> 
+1

ここに書かれているものをそのまま実行すると、「名前空間 'http://www.**.com'には関数が含まれていません。エラーが発生しましたか? – ALOToverflow

+1

MSXMLはXSLT 2をサポートしていないためです。 –

関連する問題