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 回答