0

以下が与えられた

<ZIP0>10015</ZIP0>
<ZIP1>10016</ZIP1>
...
<ZIP99>10016</ZIP99>

要素名と整数を組み合わせるために xpath concat() を使用しています。

<ZIP><xsl:value-of select="concat('ZIP','0')"/></ZIP>

concat はリテラル文字列を返します...

<ZIP>ZIP0</ZIP>

もちろん、その意図は、

<ZIP>10015</ZIP>

concat から返された文字列式を評価する方法。

これも同じ結果を提供します。

<xsl:variable name="tmp" select="concat('ZIP','0')"/>
<ZIP><xsl:value-of select="$tmp"/></ZIP>

実際、次のように評価されます。

<xsl:value-of select="'ZIP0'"/>

とは対照的に

<xsl:value-of select="ZIP0"/>

乾杯

4

1 に答える 1

4

簡潔な答え:

<ZIP><xsl:value-of select="*[name() = concat('ZIP','1')]"/></ZIP>

長い答え - 次のような表現で:

<xsl:value-of select="ZIP1"/>

ZIP1これはchild::ZIP1、ZIP1 に一致する名前を持つ子要素を (大まかに) 検索することを意味します。テキストZIP1は名前テストと呼ばれます。残念ながら、名前テストを文字列から動的に構築する方法はありません。名前を正確に指定するか、ワイルドカードを使用する必要があります*

正確な名前がわからないため、ワイルドカードの*後に​​、関心のないノードを除外する述語式を使用するしかありません。述語は、リスト内のすべてのノードで呼び出されます。このname()メソッドは、テスト対象のノードのタグ名を返すため、名前が目的の文字列と一致していることを確認するだけです。

参照については、http://www.w3.org/TR/xpathを参照してください。

于 2012-12-02T05:31:06.923 に答える