是否有可能使用一个变量里面的xsl:关键指令?(Is it possible to use a va

2019-10-17 15:06发布

关于这个问题,是有可能使用的变量里面的xsl:关键? 我想这样做水木清华这样的:

<xsl:key name="ChargesKey" match="$ChargesForDisplay/charge" use="Name"/>

我使用XSLT 1.0与ASP.Net

Answer 1:

我相信我可以安全地假设你指的是动态生成的节点集的变量(而不是那些从源DOM,这是微不足道的选择),并且是有可能上的内容执行密钥匹配动态生成的节点集的变量(如我演示了这个问题 )。

假设你有一个这样的变量:

<xsl:variable name="ChargesForDisplay">
<charge>
   <Name>Name1</Name>
</charge>
<charge>
   <Name>Name2</Name>
</charge>
<charge>
   <Name>Name1</Name>
</charge>
<charge>
   <Name>Name3</Name>
</charge>
</xsl:variable>

你会这样定义的关键:

<xsl:key name="ChargesKey" match="charge" use="Name"/>

然后你就可以应用它是这样的:

  <xsl:template match="/">
      <xsl:apply-templates select="msxsl:node-set($ChargesForDisplay)" />
  </xsl:template>

  <xsl:template
   match="charge[generate-id(.)=generate-id(key('ChargesKey',Name)[1])]">
    <xsl:variable name="matchingItems" select="key('ChargesKey', Name)" />
    ...
  </xsl:template>

当然,如果变量包含选择从源XML DOM节点,那么它只是同样的办法,除非你不需要使用msxsl:node-set()

我怀疑具有上的节点名这也是本源XML文档或多个动态生成的节点集的变量中的一个关键可能引起分组以产生意外的结果(因为键()函数将定位从两个变量节点和源文档)。 出于这个原因,我建议在节点上,只会出现在一个特定的变量和无处定义键。



Answer 2:

XSL的匹配属性:密钥必须是一个有效的模式和$ X / Y是不是一个有效的模式。 所以,答案是否定的。 现在告诉我们你想达到什么样的,我们可以帮你实现它。 (JLRishe使得一些乱撞,其中他/她所说的“野生的假设”,并可能是对的,但我不知道在哪里的猜测来自)。



文章来源: Is it possible to use a variables inside xsl:key instruction?