3

xpath-functions (特にその部分)を使用するために、次fnのように、それぞれの名前空間を xslt スタイルシートに含めました。

<xsl:stylesheet
  version="2.0"
  xmlns="http://www.w3.org/1999/xhtml"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:fn="http://www.w3.org/2005/xpath-functions"
>

W3C で指定されているとおり。

ただし、 を使用するfn:document-uriと、XSLT エンジンは、不明な関数/拡張機能を呼び出したと通知します。

  <xsl:variable name="uri" select="fn:document-uri()" />

オペラは次のように述べています。

このドキュメントには、無効な XSLT スタイルシートが含まれていました。XSLT エンジンからのエラー メッセージ:
エラー: XPath 式のコンパイルに失敗しました: fn:document-uri()
詳細: コンパイル エラー (文字 1 ~ 17、"fn:document-uri()"): 呼び出された不明な関数: '{ http: //www.w3.org/2005/xpath-functions、ドキュメント uri }'

Firefox は次のように述べています。

XSLT 変換中のエラー: 不明な XPath 拡張関数が呼び出されました。

xslt 2.0 のため、xsltproc変換を拒否します。

fnでは、名前空間を適切に指定するにはどうすればよいでしょうか。

4

1 に答える 1

4

問題は、XSLT 1.0 プロセッサを使用していて、XSLT 1.0 プロセッサが XPath 2.0 関数について何も知らない (そして知ってはならない) ことです。

実際の XSLT 2.0 プロセッサを使用する場合は、関数の名前空間を指定する必要さえありません。これは、接頭辞のない関数名のデフォルトの名前空間です。

たとえば、次の XSLT 2.0 変換:

<xsl:stylesheet version="2.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="text"/>

 <xsl:template match="/">
    <xsl:sequence select="document-uri(.)" />
    <xsl:text>&#xA;</xsl:text>
    <xsl:sequence select="document-uri(document(''))" />
 </xsl:template>
</xsl:stylesheet>

XSelerator の下で Saxon 9.1.5 を使用して実行すると、ソース XML ドキュメントの URL とスタイルシート自体が正しく生成されます

file:/C:/Program%20Files/Java/jre6/bin/marrowtr.xml
file:/C:/Program%20Files/Java/jre6/bin/marrowtr.xsl
于 2012-04-09T00:20:47.660 に答える