2

xslt 1.0テンプレートには2つの変数があり、それぞれがノードセット(xpathで選択)を保持しています。一方の変数に設定されているノードが、もう一方の変数に設定されているノードに含まれているかどうかを確認したいと思います。たとえば、ネストされたセクションを持つチャプターがあるとします。$bに含まれているかどうかを確認したい$a

<xsl:variable name="a" select="chapter//section" />
<xsl:variable name="b" select="chapter//section" />

ノードセットの共通部分を取得して、が両方で$a共有される最初の共通要素であるかどうかを確認しようとしましたが、これは機能していません。$a$b

<xsl:if test="$a/ancestor-or-self::*[count(.|$b) = count($b/ancestor::*)][1] = $a">

コンテキストを追加します。このxsltを使用してhtmlページのツリー用のタブ付きインターフェイスを作成しています。解決しようとしている問題は、class="current"を適切なタブに配置することです。各セクションをテストして、それがタブセクションの子であるかどうかを確認すると、class = "current"が取得されるため、タブは一番上にあるかのようにスタイル設定されます。

4

3 に答える 3

4

簡単に使えると思いますcount($a) = count($a|$b)。$aにないノードが$bにある場合、カウントは異なります。

于 2012-05-23T21:37:08.243 に答える
2

マイケル・ケイの良い答えを拡張するには:

$nノードがノードセットに属する場合$ns

ノードがノードセットに属している場合、ノードとノードセットの結合によってノードセットが大きくなることはありません。したがって、結合内のノードの数は多くてはなりません(実際には元のノードセット内のノードの数よりも)に等しい。

これをXPath式で表現するには

 count($n | $ns) = count($ns)

ここで、同じロジックは$ns1$ns2、2つのノードセットの和集合に、より大きなノードセットよりも多くの要素が含まれていない場合に、ノードセットがノードセットのサブセットであることを示しています。

count($ns1 | $ns2) = count($ns2)

$ns1真のサブセットであるかどうかをテストする場合$ns2

    count($ns1 | $ns2) = count($ns2)
   and
    count($ns2) > count(ns1)  
于 2012-05-25T02:14:54.103 に答える
1

別の方法で問題を解決することができました。の各祖先要素をテスト$bして、:と同じxml:idがあるかどうかを確認します$a

<xsl:if test="boolean($b/ancestor-or-self::[@xml:id=$a/@xml:id])">

これは交差点を使用していませんが、が$a含まれているかどうかはわかります$b

于 2012-05-24T19:23:55.377 に答える