1. ホーム
  2. xml

[解決済み] XSLTのposition()関数を理解する

2022-02-09 14:44:34

質問

この人と同じような悩みを抱えています。

xsltのposition()関数の使用

しかし、私はナンバリングが必要ではありません。

<?xml version="1.0" encoding="UTF-8"?>
<test>
<a>blah</a>
<a>blah</a>
<a>blah</a>
<a>blah</a>
</test>

を入力すると、次のスタイルシートが表示されます。

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
  <html>
  <body>
<xsl:apply-templates/>
  </body>
  </html>
</xsl:template>

<xsl:template match="select">
<xsl:apply-templates/>
</xsl:template>

<xsl:template match="a">
<xsl:value-of select="position()"/><br/>
<xsl:apply-templates/>
</xsl:template>

</xsl:stylesheet>

を出力します。

<html><body>
2<br>blah
4<br>blah
6<br>blah
8<br>blah
</body></html>

なぜ不揃いの数字を飛ばしてしまうのか?

どのように解決するのですか?

<ブロッククオート

なぜ不等号をスキップするのですか?

なぜなら、あなたがその間に / のレベルで、言っていましたね。

<xsl:apply-templates/>

これは、ルートノードのすべての子ノードと、(組み込みのテンプレートルールにより)そのすべての子孫ノードにテンプレートを適用します - 。 を区切るテキストノードを含む。 <a> 要素 .

を入力すると、別の結果が得られます。

<?xml version="1.0" encoding="UTF-8"?>
<test><a>blah</a><a>blah</a><a>blah</a><a>blah</a></test>

という命令をスタイルシートに追加した場合。

<xsl:strip-space elements="*"/>

または、テンプレートを選択的に適用する場合、例えば、以下のようになります。

<xsl:apply-templates select="//a"/>