1

これは、 XSLT に関する以前の質問に対する回答のフォローアップです。

要約すると、EXSLT がなければ、XSLT では文字列値を使用して xpath 式を動的に作成できないことに気づきませんでした。提案された回避策の 1 つは、

変換を実行する前に入力ドキュメントの DOM をクエリし、ノード セットを変換に渡す

私は Apache Ant を使用して変換を行い、 xslt/style タスクのパラメーターに関するマニュアルに従っていました

パラメータに入れるテキスト値。もともとは XSL 式であることが意図されていました。

Apache Ant はこれをサポートしていないようです。しかし、これをサポートするシステムで、このセマンティクスはどのように機能するのでしょうか?

したがって、どのツールチェーンまたはシステムが、ソース ドキュメントからのノードセットをパラメータとして変換に渡すことをサポートしていますか。コード例のボーナスポイント。

4

2 に答える 2

0

標準のxslt1.0では、ノードセットをパラメーターとして渡すことはできません。これを行うには、xslt2.0パーサーを使用する必要があります。

例: http ://wiki.apache.org/ant/UsingAntWithXSLT20AndSaxon

于 2011-02-19T10:07:38.330 に答える
0

私はあなたの質問を正しく理解できないように見えるので、私の答えについて完全には確信が持てませんが、あなたが参照しているスレッドとあなたの引用に基づいて、次の提案を思いつくことができます:

build.xml:

<?xml version="1.0" encoding="UTF-8"?>

<project name="Test XSLT" default="test-xslt" basedir=".">
    <target name="test-xslt">
        <xslt in="test.xml" style="ant-with-param.xsl" out="ant-with-param-out.xml">
            <param name="param-set-id" expression="2"/>
        </xslt>
    </target>
</project>

test.xml:

<?xml version="1.0" encoding="UTF-8"?>

<params>
    <set id="1">
        <param name="name" value="Name from the first set"/>
    </set>
    <set id="2">
        <param name="name" value="Name from the second set"/>
    </set>
</params>

ant-with-param.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">
    <xsl:param name="param-set-id"/>
    <xsl:variable name="param-set" select="//params/set[@id = $param-set-id]"/>

    <xsl:template match="/">
        <name>
            <xsl:value-of select="exsl:node-set($param-set)//param[@name = 'name']/@value"/>
        </name>
    </xsl:template>
</xsl:stylesheet>

出力:

<?xml version="1.0" encoding="UTF-8"?>
<name>Name from the second set</name>

指定されたスタイルシートは、ビルド ファイルから渡された変数の値に基づいて、入力ドキュメントからパラメーターをフェッチします。パラメーターは、XPath 式を使用してソース ドキュメントから取得され、後でexsl:node-set()拡張機能を使用して使用されます。デフォルトでは、xslt プロセッサとしてant使用されます。Xalanその拡張機能の完全なリストは、プロジェクトのホームページにあります。

于 2011-02-19T13:12:44.010 に答える