インクリメントの問題を解決するのを手伝ってください。position()、number()、または xpath 式を使用せずに増分番号付けリストを作成する方法はありますか?
xslt 1.0 を使用して処理したいサンプル xml ドキュメントを次に示します。
<?xml version="1.0" encoding="UTF-8"?>
<root>
<text>a</text>
<text>b</text>
<text>c</text>
<line>
<test>5</test>
<test>6</test>
</line>
<line>
<test>7</test>
<test>8</test>
</line>
<line>
<test>9</test>
<test>10</test>
</line>
<line>
<test>11</test>
<test>12</test>
</line>
</root>
私が取得したいのは、<line>
ノードごとに増加するインクリメント変数です。<pos>
インクリメント付きの目的の出力は次のとおりです。
<?xml version='1.0' ?>
<line>
<line-item>
<pos>1</pos>
<value>5</value>
<value>6</value>
</line-item>
<line-item>
<pos>2</pos>
<value>7</value>
<value>8</value>
</line-item>
<line-item>
<pos>3</pos>
<value>9</value>
<value>10</value>
</line-item>
<line-item>
<pos>4</pos>
<value>11</value>
<value>12</value>
</line-item>
</line>
これが、これまでに思いついたスタイルシートの変換です。
<?xml version='1.0'?>
<xsl:stylesheet version="1.0" id="1" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" />
<xsl:template match="/">
<xsl:variable name="total_lines" select="count(root/line)" />
<line>
<xsl:call-template name="iter">
<xsl:with-param name="end" select="$total_lines" />
</xsl:call-template>
</line>
</xsl:template>
<xsl:template name="iter">
<xsl:param name="counter" select="1" />
<xsl:param name="end" />
<xsl:if test="$counter <= $end">
<line-item>
<pos>
<xsl:value-of select="$counter" />
</pos>
<xsl:apply-templates select="root/line/test" />
</line-item>
<xsl:call-template name="iter">
<xsl:with-param name="counter" select="$counter + 1" />
<xsl:with-param name="end" select="$end" />
</xsl:call-template>
</xsl:if>
</xsl:template>
<xsl:template match="/root/line/test" >
<value>
<xsl:value-of select="." />
</value>
</xsl:template>
</xsl:stylesheet>
そして、これが実際の出力です。問題は<value>
、すべての<line-item>
ノードですべてが繰り返されることです。これは、結果として意図したものではありません。
<?xml version='1.0' ?>
<line>
<line-item>
<pos>1</pos>
<value>5</value>
<value>6</value>
<value>7</value>
<value>8</value>
<value>9</value>
<value>10</value>
<value>11</value>
<value>12</value>
</line-item>
<line-item>
<pos>2</pos>
<value>5</value>
<value>6</value>
<value>7</value>
<value>8</value>
<value>9</value>
<value>10</value>
<value>11</value>
<value>12</value>
</line-item>
<line-item>
<pos>3</pos>
<value>5</value>
<value>6</value>
<value>7</value>
<value>8</value>
<value>9</value>
<value>10</value>
<value>11</value>
<value>12</value>
</line-item>
<line-item>
<pos>4</pos>
<value>5</value>
<value>6</value>
<value>7</value>
<value>8</value>
<value>9</value>
<value>10</value>
<value>11</value>
<value>12</value>
</line-item>
</line>
インターネット全体のトピックを読みましたが、行き詰まっているようです。私を助けてください。PS長文すみません。