2

次のコードの変数での繰り返し一致の概念を理解するだけです

<xsl:param name="privileges" as="node()" select="doc('privileges.xml')"/>

<xsl:variable name="codeps" select="$privileges//privilege[matches(.,  ':[0-9]+$')]/substring-after(., ':')"/>

previleges.xml には次のコーディングがあります。

<privileges>
            <privilege>Access my notices</privilege>
            <privilege>Access draft notices</privilege>
            <privilege>Place notice</privilege>
            <privilege>Access published notices</privilege>
            <privilege>Place notice of type:2903</privilege>
            <privilege>Place notice of type:2413</privilege>
            <privilege>Place notice of type:2803</privilege>
            <privilege>Access pending notices</privilege>
            <privilege>Access my account</privilege>
            <privilege>Place legacy notice</privilege>
            <privilege>Access my searches</privilege>
            <privilege>Place notice of type:1101</privilege>
             <privilege>Place notice of type:2404</privilege>
            <privilege>Place notice of type:2402</privilege> 
            <privilege>Place notice of type:2501</privilege>
            <privilege>Place notice of type:2505</privilege>
            <privilege>Place notice of type:9900</privilege>
</privileges>

ここでは、以下の条件で、1つずつマッチングしています。

<xsl:if test="//*[@code = $codeps]">

私の疑問は、for-eachを使用せずに1つずつまたは各値をどのように照合するかです。これを使用しましたが、うまく機能しますが、まだ理解できません。$codeps の値を出力すると、一致が実行されているときに 2903 2413 2803 などの累積値が出力され、正確に一致します。

親切に理解するのを手伝ってくださいHOW?

4

1 に答える 1

2

簡単です。オペランドの 1 つ (または両方) がシーケンス (ノード セット)=の場合、 は左側のすべての値と右側のすべての値を比較します。

これは、SQL の内部結合に似ています。一致する値のペアが見つかると、式は に評価されtrueます。

この操作の反対は ではなく であることに注意してx != yくださいnot(x = y)

厳密に言えば、XPath 2.0 ではすべてがシーケンスです。単純な値は、単一の要素で構成されるシーケンスです。ここで、上記の説明は、各オペランドがいくつの要素を持っていても当てはまります。XPath 1.0 ではシーケンスは存在しませんが、=は同じように動作します。

于 2013-10-29T06:09:32.923 に答える