2

私はXSLTを初めて使用し、w3schoolsの「自分で試してみてください」ページを使用していくつかのテストを実行しています。私は次のデモを使用しています:

http://www.w3schools.com/xsl/tryxslt.asp?xmlfile=cdcatalog&xsltfile=tryxsl_choose

これには次の行が含まれます。

<xsl:for-each select="catalog/cd">

によってレンダリングされたHTMLのフィルタリングをテストしていますが、オペランドposition()の使用時に問題が発生しています。<


私は次のことを試しました:

<xsl:for-each select="catalog/cd[position()=1]">

そして、これはXMLデータから最初の項目を返します(予想どおり)。


次に試しました:

<xsl:for-each select="catalog/cd[position()<5]">

これで最初の4つのアイテムが返されることを期待していましたが、代わりに結果が得られませんでした。

私の推測では、おそらくposition()=1文字列の比較を行っているので、最初の項目が返されますがposition()<5、この方法では文字列を比較できないため、理解できませんか?

なぜこれが起こっているのですか、そして私が達成したい結果を得るための正しい構文は何でしょうか?


更新: @joocerの応答を読み取り、これを自分でテストした後、>オペランドを使用すると、逆の結果が得られます。

<xsl:for-each select="catalog/cd[(position()>5)]">
4

3 に答える 3

4

これは、w3schools が使用しているバージョンの libxslt のバグによく似ています。

于 2012-09-05T13:26:49.013 に答える
3

要素タグの開始と混同しないように、引用符内でも<asと入力する必要があります。&lt;これは、寛容なパーサーがエラーから回復しやすくし、ストリーミング パーサーがコンテンツをより速くスキップできるようにするために行われたと思います。<彼らは常に外側を探し、CDATAそれが要素の開始タグまたは終了タグであることを知ることができます。

于 2012-09-05T11:40:14.963 に答える
2

理由はわかりませんが、条件を反転するとうまくいくので、5未満を探すのではなく、4未満を探します

<xsl:for-each select="catalog/cd[not(position()>4)]">
于 2012-09-05T11:34:31.583 に答える