xpath xsl concat

时间:2012-12-02 04:21:12

标签: xslt xpath

给出以下

<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"/>

欢呼声

1 个答案:

答案 0 :(得分: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