2017-01-03 26 views
0

我使用的node-set内置功能到一个xsl变量转换成节点集,如下面的代码查询结果:节点集不工作

<xsl:variable name="allotmentValuesNodeSet" select="msxsl:node-set($allotmentValues)"/> 

命令<xsl:copy-of select="$allotmentValuesNodeSet"/>产生以下输出:

<values> 
     <month>Mar</month> 
     <incomeQTD>1499.63109246680</incomeQTD> 
     <realizedQTD /> 
     <incomeYTD>1519.35773710483</incomeYTD> 
     <realizedYTD /> 
     <incomePrevYTD>1519.35773710483</incomePrevYTD> 
     <realizedPrevYTD /> 

     <month /> 
     <incomeQTD /> 
     <realizedQTD /> 
     <incomeYTD /> 
     <realizedYTD /> 
     <incomePrevYTD /> 
     <realizedPrevYTD /> 

</values> 

当我试图查询这个XSL命令<xsl:value-of select="count($allotmentValuesNodeSet/values/month)"/>节点设置可变我总是0,但结果应该是2

allotmentValues变量包含在其他外部xml节点之间。如果我没有将它包含在任何xml节点之间,那么代码将按预期工作。

为什么查询xsl节点集可能会中断,是否有任何明显的casue(例如namespace related可能?)?

如果需要,我会试着想出一个简单的例子来说明我的问题(由于它是专有代码,我不能完全发布问题的代码片段)。

回答

1

修改变量创建,例如, <xsl:variable name="allotmentValues" xmlns="">...</xsl:variable>和可能的前缀路径<xsl:value-of select="count($allotmentValuesNodeSet/values/month)"/>的作品。

+0

这是一个优雅的修复。 – teodron

0

我发现从这个question解决方案在我的情况下工作。

问题和解决方案的简要说明:

  • 如果从中派生节点集合被包括在与一个默认的命名空间的XML块<xsl:variable/>,它继承该命名空间
  • 因此,为了正确地执行XPath查询,可以使用默认名称空间的名称为节点添加前缀,例如count($allotmentValuesNodeSet/inheritedNS:values/inheritedNSmonth)而不是count($allotmentValuesNodeSet/values/month)
相关问题