给出以下
<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"/>
欢呼声
答案 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