1

変換の 1 つで exslt 拡張機能を使用しようとしています。このサイトから、xml ファイルを 1 つに連結する方法の例を入手しました。

名前空間と要素のプレフィックスを正しく実装しましたが、コマンドラインから実行しようとするたびに、次のエラーが表示されます...

{ http://exslt.org/common }node-set() という名前の一致する引数が 1 つの関数が変数 step-concat に見つかりません(ファイル名と行番号はここにあります)

私はこのことにかなり慣れていないので、何がうまくいかないのかわかりません。私のxslファイルは

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:exsl="http://exslt.org/common"
extension-element-prefixes="exsl">

<!-- STEP Files -->
<xsl:variable name="step-output">
    <xsl:for-each select="/index/file">
        <xsl:copy-of select="document(.)" />
    </xsl:for-each>
</xsl:variable>

<!-- STEP Files as one -->
<xsl:variable name="step-concat" select="exsl:node-set($step-output)" />

<!-- Root Template -->
<xsl:template match="/">
    <xsl:element name="foo">
        <xsl:apply-templates select="$step-concat/foo"/>
    </xsl:element>
</xsl:template>

<xsl:template match="foo">
    <xsl:element name="text">
        <xsl:value-of select="bar"/>
    </xsl:element>
</xsl:template>

私は何を間違っていますか?exslt.org からモジュールをダウンロードしようとしましたが、まったく意味がありません...

4

3 に答える 3

3

Saxon HE は、Saxon PE とは異なり、組み込みの拡張機能を提供しません。

ただし、独自の拡張関数を で作成して登録できるProcessorので、簡単に実装できますexsl:node-set: http://www.saxonica.com/documentation/extensibility/integratedfunctions/

もう 1 つの方法は、Saxon B 9.1 を使用することです。

于 2010-01-27T18:07:31.723 に答える
2

それが XSLT 1.0 スタイルシートです。XSLT 2.0 では、「exsl:node-set()」などの EXSLT 拡張関数の多くが不要になります。これを、最初の行の「バージョン」を 2.0 に変更し、「exsl:node-set($step-output)」を単に「$step-output」に置き換えることで、同じことを行う XSLT 2.0 スタイルシートに変換できます。 . もちろん、XSLT 2.0 には Saxon が必要です。

于 2010-02-28T21:05:30.523 に答える
0

exslt.org のものは、XSLT エンジンに拡張機能を登録/追加した場合にのみ機能します。あなたのプラットフォームについて何も言及していないので、あなたを助けるのはちょっと難しいです.

于 2010-01-26T17:41:13.183 に答える