如何存储节点集

时间:2012-12-05 12:15:03

标签: xml xslt xslt-1.0

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

<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”值,并且它不包含节点名称,任何人都可以帮助我如何获取节点并存储它。

2 个答案:

答案 0 :(得分:0)

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

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

value-of

如果函数期望其参数是节点集而不是结果树片段,那么您将需要使用扩展函数来转换<xsl:copy-of select="code:GetMax($maxP)"/> 。既然你提到C#我假设你使用的是.NET XSLT处理器,在这种情况下你可能想要the msxsl:node-set function

$maxP

答案 1 :(得分:0)

通过给出如下节点集的路径

找到自己的答案
<xsl:copy-of select="code:GetMax(msxsl:node-set($maxP)/DailyPeakDmds/*)" />