-1

我正在调用一个返回节点集的模板,我试图将它存储在一个变量中,但它只返回值而不是节点名称

<MaxData>
  <xsl:variable name="maxP">
    <xsl:call-template name="MaxPeaks"/>
      </xsl:variable> 
</MaxData>

  <xsl:template name="MaxPeaks">
        <DailyPeakDmds>
           <xsl:text>Test1</xsl:text>
        </DailyPeakDmds>
        <DailyPeakDmds>
           <xsl:text>Test2</xsl:text>
        </DailyPeakDmds>
 </xsl:template>

将节点集发送到 c# 代码文件:

<xsl:value-of select="code:GetMax($maxP)"/>

但在 c# 方法中,它给出结果“Test1 Test2”,但我需要:

<DailyPeakDmds>
   Test1
</DailyPeakDmds>
<DailyPeakDmds>
   Test2
</DailyPeakDmds>

当我测试变量“maxP”时,它包含“Test1 Test2”值,并且不包含节点名称,任何人都可以帮助我如何获取节点集并存储它。

4

2 回答 2

0
<xsl:value-of select="code:GetMax($maxP)"/>

会将变量中包含的结果树片段maxP传递给您的扩展函数,然后将该扩展函数的返回值转换为字符串,并将该字符串值包含在输出中。如果函数返回一个节点集或另一个结果树片段,并且您希望将这些节点按原样包含在输出中(而不仅仅是节点集的字符串值),那么您应该使用copy-of而不是value-of.

<xsl:copy-of select="code:GetMax($maxP)"/>

如果函数期望其参数是节点集而不是结果树片段,那么您将需要使用扩展函数来转换$maxP。由于您提到 C#,我认为您使用的是 .NET XSLT 处理器,在这种情况下,您可能需要msxsl:node-set 函数

<xsl:copy-of select="code:GetMax(msxsl:node-set($maxP))" />
于 2012-12-05T13:03:34.263 回答
0

通过给出如下节点集的路径找到了我自己的答案

<xsl:copy-of select="code:GetMax(msxsl:node-set($maxP)/DailyPeakDmds/*)" />
于 2012-12-06T08:01:25.887 回答