0

このコードの特定のノードを選択できるというこのサイトを見つけました

<xsl:variable name="in-xml" as="item()*"> <in-xml>
     <a>1</a>
     <c>2</c>
     <a>3</a>
     <a>4</a>
     <a>5</a>    </in-xml> </xsl:variable>

あなたがこれを書いた場合、それは言う:

$in-xml/*[position() > 2]

あなたはこれを得るでしょう:

<a>3</a>
<a>4</a>
<a>5</a>

しかし、それは私にとってはうまくいかないようです。ここにサイトがあります:http ://www.xsltfunctions.com/xsl/fn_position.html

誰かがそれを取得するためのコードを与えることができますか?

4

2 に答える 2

2

XSLT 1.0では、XPath式は入力データに対してのみ実行でき、スタイルシートの評価中に作成されたデータに対しては実行できません。したがって、サンプルを機能させる1つの方法は、in-xmlデータを外部ドキュメントに移動し、document()関数を使用してロードすることです。in-xml要素をの子として記述し、変数を宣言するためにxsl:stylesheet使用することを含む、いくつかのトリッキーで巧妙なテクニックもあります。document('')/xsl:stylesheet/in-xmlこれらの手法は、優れたXSLT 1.0実装で機能しますが、一部のブラウザー実装では失敗します。

XSLT 2.0では、XPathの使用に関する制約が緩和され、スケッチした線に沿った何かが機能するはずです。

于 2012-09-25T15:40:45.673 に答える
2

EXSLTは、ここで使用できるnode-set()を定義します。MsXslの実装は次のとおりです。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:msxsl="urn:schemas-microsoft-com:xslt">
    <xsl:output method="xml" indent="yes"/>

    <xsl:template match="/">
        <xsl:variable name="in-xml" > <!--as="item()*-->
            <in-xml>
                <a>1</a>
                <c>2</c>
                <a>3</a>
                <a>4</a>
                <a>5</a>
            </in-xml>
        </xsl:variable>

        <xsl:value-of select="msxsl:node-set($in-xml)/in-xml/a[position() > 2][1]"/>
    </xsl:template>
</xsl:stylesheet>
于 2012-09-25T16:06:49.930 に答える