0

2つのシーケンスがあります。1つは1から10で、もう1つは1から3です。2番目のシーケンスを最初のシーケンスと比較して、最初の3つの項目が同じかどうかをテストする方法を教えてください。

4

2 に答える 2

1

次の短い XPath 式を使用します

deep-equal(subsequence($seq1, 1, count($seq2)), $seq2)

評価するとtrue()、2 番目のシーケンスが最初のシーケンスの開始サブシーケンスである場合に正確に生成されます。2 つのシーケンスには、ノードを含む任意の XDM アイテムの混合を含めることができます。

ここに完全なデモンストレーションがあります:

<xsl:stylesheet version="2.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text"/>

    <xsl:variable name="vSeq1" select=
        "1, 2, 3, 4, 5, 6, 7, 8, 9, 10"/>

    <xsl:variable name="vSeq2" select=
        "1, 2, 3"/>

    <xsl:variable name="vSeq3" select="/*/*"/>
    <xsl:variable name="vSeq4" select="/*/*[position() gt 5]"/>

    <xsl:variable name="vSeq5" select="/*/*"/>
    <xsl:variable name="vSeq6" select="/*/*[position() le 5]"/>

 <xsl:template match="/">
     <xsl:sequence select=
     "deep-equal(subsequence($vSeq1, 1, count($vSeq2)), $vSeq2)"/>
     ===========
     <xsl:sequence select=
     "deep-equal(subsequence($vSeq3, 1, count($vSeq4)), $vSeq4)"/>
     ===========
     <xsl:sequence select=
     "deep-equal(subsequence($vSeq5, 1, count($vSeq6)), $vSeq6)"/>
 </xsl:template>
</xsl:stylesheet>

この変換が次の XML ドキュメントに適用される場合:

<nums>
  <num>01</num>
  <num>02</num>
  <num>03</num>
  <num>04</num>
  <num>05</num>
  <num>06</num>
  <num>07</num>
  <num>08</num>
  <num>09</num>
  <num>10</num>
</nums>

必要な正しい結果が生成されます。

 true
 ===========
 false
 ===========
 true
于 2012-04-25T12:18:24.643 に答える
0

2 つの変数がseq1あり、seq2簡単にテストできると仮定します<xsl:if test="$seq1[1] eq $seq2[1] and $seq1[2] eq $seq2[2] and $seq1[3] eq $seq2[3]">...</xsl:if>

于 2012-04-25T10:56:45.537 に答える