xpath 中 xsl 参数的用法
Usage for xsl param in xpath
我将参数数组 $gen
定义为:
<xsl:variable name="inline-array">
<item>western</item>
<item>Romance</item>
<item>Adventure</item>
<item>Drama</item>
<item>Comedy</item>
<item>Horror</item>
<item>Action</item>
</xsl:variable>
<xsl:param name="gen" select="document('')/*/xsl:variable[@name='inline-array']/*"/>
我想通过 XSLT 将 XML 传输到 VXML。
参数 $gen
和 $gen2
在 Xpath
中使用时无法 select 值
<xsl:value-of select>:
<filled namelist="MovieSummary">
<if cond="MovieSummary == '{$gen[1]}'">
<prompt>
<xsl:value-of select ="//genre[.='western']/../title"/>. <xsl:value-of select ="//genre[.='western']/../summary"/>
</prompt>
<xsl:for-each select="$gen[position()>1]">
<xsl:variable name="gen2"><xsl:value-of select="."/></xsl:variable>
<elseif cond="MovieSummary == '{$gen2}'"/>
<prompt>
<xsl:value-of select ="//genre[.='$gen2']/../title"/>. <xsl:value-of select ="//genre[.='$gen2']/../summary"/>
</prompt>
</xsl:for-each>
<else/>
</if>
</filled>
当我使用 $gen2
而不是 "Romance" 或其他字符串时,select 值失败。但是 cond="MovieSummary == '{$gen[1]}'"
效果很好。
它只能生成如下内容:
<if cond="MovieSummary == 'western'">`enter code here`
<prompt>Range Feud.
Clint Turner is arrested for the murder of his girlfriend Judy's
father, a rival rancher who was an enemy of his own father.
</prompt>
<elseif cond="MovieSummary == 'Romance'"/>
<prompt>. </prompt>
<else/>
</if>
我试过:
select ="//genre[.=$gen2]/../summary";
select ="//genre[.={$gen2}]/../summary";
select ="//genre[.='{$gen2}']/../summary"
全部失败。
指令:
<xsl:for-each select="$gen[position()>1]">
将您置于 $gen
的上下文中。在此上下文中,表达式:
<xsl:value-of select ="//genre[.='$gen2']/../title"/>
select没什么,因为 //
从当前文档的根开始 - 但 genre
完全在另一个文档中。
您需要将上下文更改回已处理的 XML 文档,以便处理其中的节点。
注意:在 XSLT 2.0 中,key()
函数可以直接 select 另一个文档中的节点,而不改变整体上下文。
我将参数数组 $gen
定义为:
<xsl:variable name="inline-array">
<item>western</item>
<item>Romance</item>
<item>Adventure</item>
<item>Drama</item>
<item>Comedy</item>
<item>Horror</item>
<item>Action</item>
</xsl:variable>
<xsl:param name="gen" select="document('')/*/xsl:variable[@name='inline-array']/*"/>
我想通过 XSLT 将 XML 传输到 VXML。
参数 $gen
和 $gen2
在 Xpath
<xsl:value-of select>:
<filled namelist="MovieSummary">
<if cond="MovieSummary == '{$gen[1]}'">
<prompt>
<xsl:value-of select ="//genre[.='western']/../title"/>. <xsl:value-of select ="//genre[.='western']/../summary"/>
</prompt>
<xsl:for-each select="$gen[position()>1]">
<xsl:variable name="gen2"><xsl:value-of select="."/></xsl:variable>
<elseif cond="MovieSummary == '{$gen2}'"/>
<prompt>
<xsl:value-of select ="//genre[.='$gen2']/../title"/>. <xsl:value-of select ="//genre[.='$gen2']/../summary"/>
</prompt>
</xsl:for-each>
<else/>
</if>
</filled>
当我使用 $gen2
而不是 "Romance" 或其他字符串时,select 值失败。但是 cond="MovieSummary == '{$gen[1]}'"
效果很好。
它只能生成如下内容:
<if cond="MovieSummary == 'western'">`enter code here`
<prompt>Range Feud.
Clint Turner is arrested for the murder of his girlfriend Judy's
father, a rival rancher who was an enemy of his own father.
</prompt>
<elseif cond="MovieSummary == 'Romance'"/>
<prompt>. </prompt>
<else/>
</if>
我试过:
select ="//genre[.=$gen2]/../summary";
select ="//genre[.={$gen2}]/../summary";
select ="//genre[.='{$gen2}']/../summary"
全部失败。
指令:
<xsl:for-each select="$gen[position()>1]">
将您置于 $gen
的上下文中。在此上下文中,表达式:
<xsl:value-of select ="//genre[.='$gen2']/../title"/>
select没什么,因为 //
从当前文档的根开始 - 但 genre
完全在另一个文档中。
您需要将上下文更改回已处理的 XML 文档,以便处理其中的节点。
注意:在 XSLT 2.0 中,key()
函数可以直接 select 另一个文档中的节点,而不改变整体上下文。