xml - xpath 中 xsl 参数的用法

标签 xml xslt xpath vxml

我将参数数组$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。 我在 Xpath 中使用时,参数 $gen$gen2 无法选择值

<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”或其他字符串时,无法选择值。但是 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"/>

不选择任何内容,因为 // 从当前文档的根目录开始 - 但 genre 完全在另一个文档中。

您需要将上下文更改回已处理的 XML 文档,以便寻址其中的节点。

注意:在 XSLT 2.0 中,key() 函数可以直接选择另一个文档中的节点,而无需更改整体上下文。

关于xml - xpath 中 xsl 参数的用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36145137/

相关文章:

c# - 用于选择特定节点下的节点(中间有零个或多个节点)的 XPath

c# - 从网络反序列化 XML

Python:xml.dom.minidom 空 nodeValue 非空 toxml() 值

.net - 将 XSL 转换应用于 XElement 的最佳方法是什么?

xml - 如何从带有命名空间的 XML 中获取 'select'?

xpath - Scrapy-如何将字符串转换为可以在其上使用XPath的对象?

java - 导航 xml 输入文件的层次结构

java - 如何在Play框架中控制XML元素名称

xml - xsl :for-each loop counter

java - 如何使用 XPATH 获取 XML 元素的相对深度